获取带有CPT和自定义分类条件的模板部件

时间:2016-01-11 作者:Ebenizer Pinedo

我有两种自定义的帖子类型,一种是视频帖子,另一种是图库帖子,还有一种自定义的分类法状态帖子,其中有一个术语是特色帖子。

现在我正在我的index.php, 但是我想对每一个都进行样式化,所以我使用get_template_part 为了实现它。

当我想获得与CPT结合的特定术语的模板时,问题就来了,在本例中,是特色和视频。它适用于术语为“特色”的常规帖子,但不适用于自定义帖子类型。

这是我的代码:

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

 <?php while (have_posts()) : the_post(); ?>


            <?php

            if ( get_post_type() == \'videos\' ) : ?>

                <?php get_template_part( \'frontales/front\', \'video\' ); ?>

            <?php elseif ( has_term( \'featured\', \'status\', $post->ID)):?>

               <?php get_template_part( \'frontales/front\',\'video-featured\' ); ?>

            <?php elseif ( get_post_type() == \'gallery\' ) : ?>

                <?php get_template_part( \'frontales/front\', \'gallery\' ); ?>

            <?php else: ?>     

            <?php get_template_part( \'frontales/front\', \'news\' ); ?> 


            <?php endif; ?>

        <?php endwhile; ?>


        <?php endif; ?>

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

您的订单if/else statement 是错误的。您希望将复杂条件(或最重要条件)放在顶部,将最简单条件(或最不重要条件)放在底部。

if/else 语句的工作基础是,将执行第一个命中true的条件。在上面的示例中,如果您有一篇文章属于指定的术语和文章类型,并且您首先检查了该文章类型或术语,则该条件将始终为true并激发,而不管之后是否存在任何其他条件,并且检查您的文章是否属于指定的术语和文章类型的条件将永远不会激发,尽管它也为true。

您需要重新构造条件语句,使其看起来像

if (    \'videos\' === get_post_type 
     && has_term( \'featured\', \'status\' ) 
) {
    // load template when post has the desired term and post type
} elseif ( \'videos\' === get_post_type() ) {
    // Load template for videos post post type
} elseif ( has_term( \'featured\', \'status\' ) ) {
    // Load template for posts attached to the featured term
} elseif ( \'gallery\' === get_post_type() ) {
    // Load template for posts from the gallery post type
} else {
    // Load a default template for all other posts
}

相关推荐

Updating modified templates

我想调整一些。php模板文件在我的WordPress主题中,我知道正确的过程是将相关文件复制到子主题文件夹中并在那里编辑文件,这样我的修改就不会在将来的主题更新中丢失。但这是否意味着我将无法从主题更新中获益,因为我将文件放在了我的子主题文件夹中?这可能不是一件好事,因为主题更新可能添加了一些有用的特性,甚至修复了我最初需要对代码进行调整的问题!这方面的常见解决方案是什么?有人推荐了一款Diff应用程序——这是人们常用的吗?