我有两种自定义的帖子类型,一种是视频帖子,另一种是图库帖子,还有一种自定义的分类法状态帖子,其中有一个术语是特色帖子。
现在我正在我的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; ?>
最合适的回答,由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
}