为什么按类别访问URL会导致帖子类型出现问题?

时间:2016-05-12 作者:jkd540

我刚刚用几个CPT(苹果、香蕉、黄瓜)建立了一个网站。我的老板想把它们分成几个类别(红色、黄色、绿色),并链接到类别页面。当我们通过URL中的类别访问页面时,页面显示不正确。

明确地mysite.com/category/red 正在显示正确的类别,但我WP_Query 在侧边栏中引入另一个帖子类型,现在显示的是默认帖子,而不是CPT。

除了/category. 如果我使用archive.phpcategory.php 作为模板。知道为什么吗?

我应该提到的是,我在我的functions.php 首先让CPT在/类别上显示。

    function query_post_type($query) {
        if ( ! is_admin() ) {
            if( is_category() || is_tag() &&  $query->is_main_query() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
            $post_type = get_query_var(\'post_type\');
            if($post_type)
                $post_type = $post_type;
            else
                $post_type = array( \'post\',\'apple\',\'banana\',\'cucumber\',\'nav_menu_item\');

            $query->set(\'post_type\', $post_type);
        }
    }
}
add_action(\'pre_get_posts\', \'query_post_type\');

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

由于逻辑运算符的工作方式,您的条件为off,并且在类别页面上始终为true。

如果我这样写的话,这可能会更清楚:

is_category() || ( is_tag() &&  $query->is_main_query() )
一次is_category() 确定是真的其余条件都无关紧要。

你的逻辑应该更加精确,大致如下(括号很重要!):

$query->is_main_query() && ( $query->is_category() || $query->is_tag() )