使用带有关系‘OR’的TAX_QUERY的查询集是否修改类别对象?

时间:2013-11-21 作者:its_me

(Update: 请查看下面的编辑。)

代码:

function itsme_better_editions( $query ) {
    if ( $query->is_category() && $query->is_main_query() ) {
        $query->set( \'post_type\', array( \'post\' ) );
        $query->set( \'tax_query\',
            array(
                \'relation\' => \'OR\',
                array(
                    \'taxonomy\' => \'category\',
                    \'field\' => \'slug\',
                    \'terms\' => \'intl\',
                    \'operator\' => \'IN\'
                )
            )
        );
    }
    return $query;
}
add_filter( \'pre_get_posts\', \'itsme_better_editions\' );
我使用此功能显示所有类别下分配给“国际(intl)”类别的职位,即所有类别档案中的职位。

(例如,在我的案例中,类别表示新闻网站的常见版本。)

问题是,使用该功能后,似乎所有归档的术语对象都设置为“国际(intl)”,无论是类别归档、标记归档、自定义分类归档等。

所以for example, 如果我访问“UK(UK)”类别档案<?php single_cat_title(); ?> 显示“国际”而不是“英国”。(NOTE: single_cat_title() 这只是一个示例,也是术语对象更改引起的唯一问题。)

为什么会这样?(尽管有me设置\'relation\' => \'OR\'.) 我应该怎么做才能解决这个问题?

PS: 令人惊讶的是,这曾经奏效(非常积极),我不知道这在哪个版本的WordPress中出现过。

EDIT: 我刚刚意识到,问题似乎是$tax_query = $query->get( \'tax_query\' ); 为空或不是数组。我真的不知道为什么会发生这种情况,以及我的代码出了什么问题。

Related Question: When/why does \'$query->get( \'tax_query\' );\' return empty?

1 个回复
SO网友:Eric Holmes

问题是您正在覆盖整个tax_query. 当您转到英国类别存档时,税务查询设置为具有与国际相同的内容,但您正在取消当前查询。以下是解决方案:

...
$tax_query = $query->get(\'tax_query\');
$tax_query[\'relation\'] = \'OR\';
// puts the item at the beginning of the array instead of the end.
array_unshift( $tax_query, array(
        \'taxonomy\' => \'category\',
        \'field\' => \'slug\',
        \'terms\' => \'intl\',
        \'operator\' => \'IN\'
    );
$query->set( \'tax_query\', $tax_query );
...

结束

相关推荐

WordPress查询字符串:GET_POSTS(‘cat=5’)vs WP_Query(‘cat=5’)vs URL:/site/?cat=5

我们可以使用URL查询字符串筛选帖子:http://mysite.com/?cat=5我们还可以使用类似的语法get_posts(\'cat=5\') 和new WP_Query(\'cat=5\').** get_posts(\'param=value\'); 只需将字符串传递给new WP_Query(\'param=value\');, 因此,它们的作用是相同的。虽然这些似乎都有相同的语法,但URL查询字符串支持不同的参数。我不明白subpost 或subpost_id WP\\u Query类