我有一个自定义的帖子类型“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)内置分类法与之链接。
你可以看看this 和this 查看我如何配置所有内容的屏幕截图。
我在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.