如果要在where子句上添加筛选器,那么只需确保使用remove\\u filter()和完全相同的签名将其删除immediately after 您可以创建查询。
在您的示例中,您使用的是query\\u posts(),因此请添加过滤器,运行查询,然后立即删除过滤器。
add_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
query_posts( $query_string );
remove_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
需要注意的是,当您使用2参数版本时,第二个参数在限制过滤器仅影响您感兴趣的查询方面非常有用。
add_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
function my_posts_where_filter( $where_clause, $query_object ){
// check conditions on your query object...
// ... then manipulate your $where_clause accordingly
return $where_clause;
}
如果这样做,您可能完全可以省去remove\\u filter()。
此外,您可能不需要query_posts()
当你这样做的时候,我也是。如果你已经在胡闹get_posts()
过滤器,在每个查询上运行,并在另一个查询中添加query_posts()
只会减慢你的博客加载时间。
因此,找到一种方法来识别您所在的页面(使用print_r()
看看它有什么好处,或者使用条件likeis_main_query()
等),然后包装您的附加WHERE
大ol’内的条件if{ }
块设置过滤器不是从您所在的页面模板,而是从您的functions.php
, 或者一些包含的类。当然还有test, test, test 确保您不会影响站点的其他页面、某些小部件、RSS提要或管理后端。