WP_Query parameter conflict

时间:2012-10-29 作者:Giovanni

我正在编写一个查询,以检索我创建的名为“专家”的自定义帖子类型的实例。在查询中,我指定了一个名称和多个分类法
我只想检索那些specialist 哪个方面both 参数
如果我分别运行这两个查询,将返回正确的专家,但当我将这两个专家集成到一个查询中时,似乎post_name 优先考虑分类法。

例如,如果我运行查询要求specialist 已命名test 使用分类法therapist, 我回来了specialist 调用test 即使它没有therapist 分类学

代码如下:

$args = array(
    \'post_type\'=>\'specialist\',
    \'name\' => \'test\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'type\',
            \'field\' => \'slug\',
            \'terms\' => \'therapist\'
        )
    )
);

$specialists = new WP_Query($args);

2 个回复
SO网友:truemedia

您的帖子类型是非层次式的帖子,还是层次式的页面?它将确定应该在中使用哪个slug参数WP_Query:

name (string) - non-hierarchical (post) slug.
pagename (string) - hierarchical (page) slug.
此外,tax\\u查询还应具有operator参数。可能的值为“IN”、“NOT IN”、“AND”。您应该将其设置为“AND”。这可能是一个解决方案:

$args = array(
    \'post_type\'=>\'specialist\',
    \'postname\' => \'test\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'type\',
            \'field\' => \'slug\',
            \'terms\' => \'therapist\',
            \'operator\'=> \'AND\'
        )
    )
);

$specialists = new WP_Query($args);
如果它真的不起作用,那么您可以通过创建一个过滤函数来解决问题,将where子句添加到查询中

function filter_where( $where = \'\' ) {
    // post_name
    $where .= " AND $wpdb->posts.post_name = \'test\'";
    return $where;
}
add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $args );
remove_filter( \'posts_where\', \'filter_where\' );

SO网友:Kaung Ko

是的,您的查询是错误的,您正在查询帖子名称“Test”,它是“专家”帖子类型,分类法是“治疗师”。

正确的一个应该是“专家”职位类型中的任何post\\u名称,该职位类型具有类型分类,术语为“治疗师”。

$args = array(
\'post_type\'=>\'specialist\',
\'tax_query\' => array(
    array(
        \'taxonomy\' => \'type\',
        \'field\' => \'slug\',
        \'terms\' => \'therapist\'
    )
)
);

specialists = new WP_Query($args);
我想这应该没问题。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post