从所有档案中排除分类3项中的2项

时间:2013-06-19 作者:Zen Nguyễn

我读过这篇帖子:Include and Exclude Taxonomies From Archives & Feeds Using 'pre_get_posts'

然后我将这个函数用于我的主题。我的分类法(tinh trang)有3个术语:19、20、21,当访问者访问任何档案时,我想排除所有具有术语id:19、21的帖子。

但我什么都没变?

add_filter(\'pre_get_posts\',\'change_archive_loop\');

function change_archive_loop( $query ) {
    $choduyet = intval(get_option(\'zen-id_cho_duyet\')); // Get term ID 1 from theme option
    $baocao = intval(get_option(\'zen-id_bao_cao\')); // Get term ID 2 from theme option
    if ( $query->is_tax( \'tinh-trang\' ) && $query->is_main_query() ) {
        $terms = array($choduyet, $baocao);
        $query->set( \'post_type\', array( \'post\' ) );
        $query->set( \'tax_query\', array(
            \'relation\' => \'OR\',
            array(
                \'taxonomy\' => \'tinh-trang\',
                \'field\' => \'id\',
                \'operator\' => \'NOT IN\',
                \'terms\' => $terms
            )
        ) );
    }

    return $query;
}

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

几句话:

我使用pre_get_posts 作为动作钩,而不是过滤器! is_admin() 以防止更改后端视图\'relation\' => \'OR\', 因为你只有一个tax_query 筛选是否有任何原因需要修改帖子类型?您的自定义分类是否附加到多个帖子类型

add_action( \'pre_get_posts\', \'change_archive_loop\' );

function change_archive_loop( $query ) {
    $choduyet = intval( get_option( \'zen-id_cho_duyet\' ) );
    $baocao = intval( get_option( \'zen-id_bao_cao\' ) );
    if ( ! is_admin() && $query->is_tax( \'tinh-trang\' ) && $query->is_main_query() ) {
        $terms = array( $choduyet, $baocao );
        $query->set( \'tax_query\', array(
            array(
                \'taxonomy\' => \'tinh-trang\',
                \'field\' => \'id\',
                \'operator\' => \'NOT IN\',
                \'terms\' => $terms
            )
        ) );
    }
 }

SO网友:ksr89

您可以像这样使用exclude。

    $posts = get_posts(  array( \'numberposts\'   => -1,
                                \'exclude\'       => array(\'post_id_1\', \'post_id_2\'),
                                \'post_type\'     => \'post_type\',
                                \'orderby\'       => \'meta_value_num\',
                                \'meta_key\'      => \'post_meta_key\',
                                \'order\'         => \'DESC\',
                                \'tax_query\'     => array(\'relation\'=> \'OR\',
                                                        array(  \'taxonomy\'  => \'taxonomy_1\',
                                                                \'field\'     => \'id\',
                                                                \'terms\'     => \'taxonomy_id_1\'
                                                                )),
                                                        array(  \'taxonomy\'  => \'taxonomy_id_2\',
                                                                \'field\'     => \'id\',
                                                                \'terms\'     => \'taxonomy_id_2\'
                                                                )),
                                \'meta_query\'    => array(array( \'key\' => \'meta_key\',
                                                                \'value\' => \'meta_value\'
                                                            ))
                                            )
                                    );
如果要在“meta\\u query”中使用关系,请编写与在“tax\\u query”中编写相同的代码。

您还可以使用“wp\\u query”而不是“get\\u posts”。

结束

相关推荐

Display Custom Taxonomy

我在为网络广播优化的主题中使用自定义帖子类型(自定义主题)。我添加了一个名为“Radio Shows”的自定义帖子类型,并注册了两个自定义分类法:一个是层次分类法(类似于默认的“categories”,我将其命名为流派),另一个是非层次分类法(类似于“tags”,我将其命名为INSTRUMENTS)。我已经设法在索引中显示了该自定义帖子类型的帖子。php与其他默认帖子类型的帖子一起创建了一个页面模板,该模板只显示自定义帖子类型的帖子(广播节目)效果很好,我可以看到它们以正确的顺序正常显示。两个页面(专用于