自定义分类模板不能与简单循环一起使用。使用相同分类的多个CPT

时间:2016-08-20 作者:Amit

我需要WP自定义分类法和自定义帖子类型的帮助。到目前为止,我还没有找到有效的解决方案。如果这有一个简单的解决方案,请接受我的道歉。我尽了最大努力,首先在所有地方找到解决方案。

问题说明-

我有一个分类法叫"department"."course", "faculty", "library"."department". 我已成功完成所有设置,并将“department”分类法分配给所有3个CPT。

现在,我尝试按“部门”分类法显示帖子(所有3个CPT帖子)(例如,我有“x”、“y”、“z”等术语表示分类法“部门”)。我有一个名为"taxonomy-department.php", 有简单的循环-

<?php if (have_posts()) : ?>

        <ul> 

        <?php while (have_posts()) : the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>

<?php endif; ?>
分类法模板中的上述循环不起作用,并且没有显示帖子。只是转到else语句。我不知道如何做到这一点。

如果我(在您的帮助下)成功获取帖子,是否也可以通过CPT过滤帖子?(在分类模板文件中)

非常感谢您的帮助。

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

WP默认显示存档中的正常本机帖子。它不会自动拾取您想要归档中的帖子类型。

您必须调整它的主查询以向它解释这一点,例如:

add_action( \'pre_get_posts\', function ( WP_Query $query ) {

    if ( $query->is_main_query() && $query->is_tax( \'department\' ) ) {
        $query->set( \'post_type\', [ \'course\', \'faculty\', \'library\' ] );
    }
} );

SO网友:Amit

我要感谢@Rarst对答案的贡献。这是最后一段代码-

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

function my_tax_query($query){

    if ( !is_admin() && $query->is_main_query() && $query->is_tax( \'department\' ) ) {
        $query->set( \'post_type\', array( \'course\', \'faculty\', \'library\' ) );
    }
};
将代码放在functions.php 文件这将从您拥有的所有帖子类型中获取所有帖子(针对术语页面)。

例如,如果您的术语页是http://domain-name.com/taxonomy/term1/您将获得“的所有帖子”term1“适用于所有帖子类型。

现在,我们可以按“帖子类型”过滤帖子了吗?有没有办法做到这一点?谢谢

SO网友:CodeMascot

请试试这个-

$post_type = array(\'course\', \'faculty\', \'library\');
$terms = array( \'x-tax-slug\', \'y-tax-slug\', \'z-tax-slug\' );
$args = array(
    \'post_type\' => $post_type,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'department\',
            \'field\'    => \'slug\',
            \'terms\'    => $terms,
        ),
    ),
);
$query = new WP_Query( $args );

<?php if (have_posts()) : ?>

        <ul> 

        <?php while ($query->have_posts()) : $query->the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>

<?php endif; ?>

<?php wp_reset_postdata(); // reset the query ?>
因此,这里我们根据您的department 分类法和自定义帖子类型。最后,我们正在重置查询。

相关推荐