使用检查当前查询是否为主查询$query->is_main_query()
.
add_action( \'pre_get_posts\', array($this, \'exclude_category\') );
public function exclude_category( $query){
if( is_admin() && $query->is_main_query() && isset( $_GET[\'cta_filter\']) && ! empty( $_GET[\'cta_filter\'] ) ) {
$term = sanitize_text_field( $_GET[\'cta_filter\'] );
$tax_query = $query->get(\'tax_query\') ?: array();
$tax_query[] = array(
\'taxonomy\' => \'cta_tax\',
\'field\' => \'slug\',
\'terms\' => array( $term ),
\'operator\' => \'IN\'
);
$query->set(\'tax_query\',$tax_query):
}
}
我想
?cta_filter=
只会在您的帖子类型的管理页面上设置,因此不需要进一步的条件,但为了更安全,您可能需要添加另一个条件:
&& \'post_type_name\' === $query->get( \'post_type\' )
还要注意我对您的代码所做的另一个更改。我建议使用
get()
和
set()
方法。