有几件事需要考虑,所以让我们分别来看一下:
Preserve Admin Screens
如前所述,您的功能会影响该帖子类型的每个页面,包括您的管理屏幕,该屏幕将从所有帖子列表中隐藏您过滤的帖子。
测试以查看管理屏幕是否已使用is_admin()
如果有的话,早点回来。您的函数已连接到pre_get_posts
并且会在每次页面加载时触发多次,因此尽早返回和避免额外代码的概念对于避免性能问题非常重要。
Post Type Archive
您对的使用
is_archive()
不是在做你期望的事情。没有可用于的参数
is_archive()
所以
my-post-type
被忽略。
https://developer.wordpress.org/reference/functions/is_archive/使用is_post_type_archive( \'my-post-type\' )
是测试查询是否为您的CPT存档页的正确方法。如果查询不是(!),请提前返回。https://developer.wordpress.org/reference/functions/is_post_type_archive/
Exclude Taxonomy
使用“tax query”向主查询添加税务查询参数;“不存在”;操作员将删除任何对您的税务有任何术语的帖子。注意:分类查询参数是按设计排列的数组。税务查询文档:
https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters别忘了更新my-post-type
和my-taxonomy
用你真正的鼻涕虫。
综合起来,我们得到:
function wpse_exclude_mytaxonomy_from_archive( $query ) {
// Three conditions that we want to exit early for
if ( ( is_admin() ) || ( ! is_post_type_archive( \'my-post-type\' ) ) || ( ! $query->is_main_query() ) ) {
return;
}
// Modify the query to exclude posts with any My Taxonomy term
$taxquery = array(
array(
\'taxonomy\' => \'my-taxonomy\',
\'operator\' => \'NOT EXISTS\',
)
);
$query->set( \'tax_query\', $taxquery );
}
add_action(\'pre_get_posts\', \'wpse_exclude_mytaxonomy_from_archive\');