如何从自定义帖子类型归档中排除自定义分类中的帖子?

时间:2021-06-16 作者:Brandon

我试图将自定义分类法中的帖子从特定自定义帖子类型存档中排除。我如何才能做到这一点?今天,我是根据每个帖子来做这件事的,这是不现实的。非常感谢!

    function exclude_taxonomy_from_archive($query) {
        if ($query->is_archive(\'my-post-type\') && $query->is_main_query()) {
            $query->set(\'post__not_in\', array(\'108747\', \'105590\', \'105592\', \'105594\', \'105596\' ));
        }
    }
    add_action(\'pre_get_posts\', \'exclude_taxonomy_from_archive\');

1 个回复
最合适的回答,由SO网友:jdm2112 整理而成

有几件事需要考虑,所以让我们分别来看一下:

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-typemy-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\');

相关推荐