我有一个复杂的查询,需要连接多个表。我是通过add_filter(\'posts_join\')
- 我的问题是,何时何地添加过滤器,使其仅适用于自定义查询?
我的自定义查询
$test = new WP_Query(array(\'post_type\' => \'artcpt\', \'posts_per_page\' => 10, \'tax_query\' => array(array(\'taxonomy\' => \'arttax\', \'field\' => \'id\', \'terms\' => array(20,41,16)))));
我应该在查询上方还是之后实际添加过滤器?我是否需要将它放在一个单独的文件(function.php)中,然后以另一种方式附加它?我需要做点什么吗
query_vars
?
最合适的回答,由SO网友:birgire 整理而成
要在创建查询之前添加筛选器:
add_filter( \'posts_join\', \'custom_posts_join\' );
$test = new WP_Query( $args );
您可以在主题文件中定义过滤器回调,例如
functions.php
或在插件中:
function custom_posts_join( $join )
{
// modifications
// $join = ...
// remove the filter
remove_filter( current_filter(), __FUNCTION__ );
// return the result
return $join;
}
请注意,我们使用以下行删除过滤器:
remove_filter( current_filter(), __FUNCTION__ );
因此,它不会影响其他查询。