要想做你想做的事,你需要使用add_query_arg()
和get_query_var()
, 然后使用查询参数/值修改查询。
我将举一个例子,说明如何在一个自定义主题中创建类似的“过滤器”;您需要稍微修改它以符合表单字段标记,而不是像我一样只使用锚。
首先,需要添加查询参数,如下所示:
<a href="<?php echo add_query_arg( array( \'cat_filter\' => \'some-cat\' ) ); ?>">Some Cat</a>
此链接实际上会重新加载当前页面,其中
cat_filter=some-cat
附加到URL查询字符串。
其次,您需要确定是否已设置查询参数:
global $wp_query;
$cat_filter = ( isset( $wp_query->query_vars[\'cat_filter\'] ) ? $wp_query->query_vars[\'cat_filter\'] : false );
(注意:为了数据安全,您需要在此处进行一些清理。)
如果使用自定义查询,请通过WP_Query
, 您可以直接在模板中执行此检查,然后将结果添加到自定义查询参数数组中。但是,如果使用的是主循环查询,则需要将其包装在回调中以进行筛选pre_get_posts
:
function wpse63374_filter_pre_get_posts( $query ) {
if ( ! is_main_query() ) {
return $query;
} else {
if ( isset( $query->query_vars[\'cat_filter\'] ) ) {
// Don\'t forget to add sanitization!
$query->set( \'category_name\', $query->query_vars[\'cat_filter\'] );
}
return $query;
}
}
add_filter( \'pre_get_posts\', \'wpse63374_filter_pre_get_posts\' );
如果要清除过滤器,可以使用
remove_query_arg()
.