有一种方法可以使用$QUERY->SET(‘TAX_QUERY’in pre_Get_Posts筛选器?

时间:2011-11-30 作者:José Pablo Orozco Marín

有一种方法可以使用$query->set(\'tax_query\', ...) 在里面pre_get_posts 滤器例如,下一个代码不会更改查询。请注意,我正在从和自定义搜索构建$分类法。

function custom_search_filter($query) {
        ...

        // array(\'taxonomy\' => \'category\', \'field\' => \'id\', \'terms\' => array( 41,42 ), \'operator\' => \'IN\')
        $taxonomies = implode(\',\', $taxonomy_arr);

        // https://wordpress.stackexchange.com/questions/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies

        $taxonomy_query = array(\'relation\' => \'AND\', $taxonomies);

        $query->set(\'tax_query\', $taxonomy_query);
    }

    return $query; 
}


add_filter( \'pre_get_posts\', \'custom_search_filter\', 999 );
提前谢谢。

2 个回复
最合适的回答,由SO网友:t31os 整理而成

这个$query 过滤器中的变量表示WP_Query 对象,所以您不应该传递新WP_Query 对象设置该对象属性的方法。

这个question you copied code from 没有正确使用过滤器,我觉得这是你问题的症结所在。

tax_query 可在内部使用pre_get_posts (或类似情况parse_request) 过滤器/操作。

Here is an example:
为搜索查询指定自定义分类法

function search_filter_get_posts($query) {
    if ( !$query->is_search )
        return $query;

    $taxquery = array(
        array(
            \'taxonomy\' => \'career_event_type\',
            \'field\' => \'id\',
            \'terms\' => array( 52 ),
            \'operator\'=> \'NOT IN\'
        )
    );

    $query->set( \'tax_query\', $taxquery );

}
add_action( \'pre_get_posts\', \'search_filter_get_posts\' );

SO网友:Tanner Moushey

税务查询还要求您在查询中设置Tax\\u查询对象,因为该查询已被解析。查看我的答案Modify Taxonomy pages to exclude items in child taxonomies.

结束

相关推荐