带有定制POST_TYPE的WP_QUERY和CAT检索带有定制帖子的不需要的帖子

时间:2019-01-25 作者:Pierre

我有一个自定义的帖子类型“projets”,它使用类别分类法(因此它与常规帖子共享类别)。

当我这样调用WP\\u Query时:

$args = array(
    \'post_type\' => \'projets\',
    \'posts_per_page\' => 6,
    \'paged\' => (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1,
);
$projects = new WP_Query($args);
它工作得非常好。但当我向如下参数添加一个类别时:

$args = array(
    \'post_type\' => \'projets\',
    \'posts_per_page\' => 6,
    \'paged\' => (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1,
    \'cat\' => 39
);
$projects = new WP_Query($args);
它不仅返回projets自定义post\\u类型,还返回共享类别39的常规帖子。。。有没有办法确保only 是否将返回自定义帖子类型?

有关信息,我使用Custom Post Type UI 扩展来声明post类型,我自己没有声明它们。

<小时>Edit:

为了在第一次评论之后澄清,我没有注册自定义分类法。

我只使用CPT UI插件注册了一个名为“projets”的自定义帖子类型,我将类别(WP Core)内置分类法与之链接。

你可以看看thisthis 查看我如何配置所有内容的屏幕截图。

我在WP\\u查询中使用的帖子类型名称是正确的,因为它确实返回“projets”帖子。问题是,当我向$args添加一个类别时,就会返回常规帖子(带有“post”类型的帖子)。

<小时>Edit 2 and solution:

正如所指出的@krzysiek-dróżdż@chinmoy-kumar-paul , 在我的主题文件中,我使用pre\\u get\\u posts过滤器:

//Add projets custom posts within the loop
function namespace_add_custom_types( $query ) {
  if( (is_category() || is_tag()) && $query->is_archive() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
    $query->set( \'post_type\', array(
     \'post\', \'projets\'
        ));
    }
    return $query;
}
add_filter( \'pre_get_posts\', \'namespace_add_custom_types\' );
如果我把它注释掉,问题就消失了。。。所以问题被发现了!

但这不是WordPress的bug吗?我的意思是,我仍然希望这个自定义帖子类型包含在循环中,所以我的问题没有完全解决。

In the end, one solution is to add $args[\'suppress_filters\'] = true; before doing the query, allowing to avoid this filter and fix the problem.

3 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

假设您有一个带slug的CPTprojets 您已经为该CPT注册了内置类别,看起来都是正确的。

所以有两种可能性,我要检查一下:

输入错误-可能您在代码中的某个地方输入了错误的CPT名称

  • pre_get_posts 过滤器正在修改您的查询并更改其行为(如果您编写pre_get_posts 并且对其内部条件没有足够的关注)
  • SO网友:Chinmoy Kumar Paul

    您将使用tax\\u查询选项来查询自定义记账类型。您的查询如下所示

    $args = array(
        \'post_type\' => \'projets\',
        \'posts_per_page\' => 6,
        \'paged\' => (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1,
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'category\',
                \'field\'    => \'term_id\',
                \'terms\'    => array( 39 )
            )
        ),
    );
    $projects = new WP_Query($args);
    

    SO网友:Jaydip Nimavat

    不能为自定义分类传递CAT参数。您必须使用tax\\u查询。

    参考WordPress codex URL:https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters