我有一个使用自定义顺序(通过重新排序插件)在自定义帖子类型中循环查询所有帖子
这是我的代码:
<?php
$current_id = get_the_ID();
$counter = 0;
$the_query = new WP_Query(array(
\'posts_per_page\' => -1,
\'post_type\' => \'course_unit\',
\'orderby\' => \'menu_order\'
));
?>
<h4>Your Course Units</h4>
<ul>
<?php if( $the_query->have_posts() ): while( $the_query->have_posts() ) : $the_query->the_post();
$post_id = get_the_ID();
?>
<li><a href="<?php the_permalink(); ?>" class="list-link<?php if($post_id == $current_id) : ?> current-unit<?php endif; ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>
<?php wp_reset_query(); ?>
此输出为:
<h4>Your Course Units</h4>
<ul>
<li><a href="https://website.com/unit-1/" class="list-link">Unit 1</a></li>
<li><a href="https://website.com/unit-2/" class="list-link">Unit 2t</a></li>
<li><a href="https://website.com/unit-3/" class="list-link">Unit 3</a></li>
<li><a href="https://website.com/unit-4/" class="list-link">Unit 4</a></li>
<li><a href="https://website.com/unit-5/" class="list-link current-unit">Unit 5</a></li>
<li><a href="https://website.com/unit-6/" class="list-link">Unit 6</a></li>
<li><a href="https://website.com/unit-7/" class="list-link">Unit 7</a></li>
<li><a href="https://website.com/unit-8/" class="list-link">Unit 8s</a></li>
</ul>
如你所见,我在当前帖子中附加了一个类,以便列表中当前的课程链接具有特殊的样式。我还想做的是让当前帖子前后的风格有所不同。用户应该一个接一个地浏览单元,所以我希望前面的帖子链接变灰(我只需要一个类,我可以设置样式)
我试着用一个计数器变量来实现这一点(因为我不能用ID或日期来实现,因为这是一个自定义订单),但我无法让它工作。如何将类附加到当前帖子之前的所有帖子?任何帮助都将不胜感激。
最合适的回答,由SO网友:Dave Romsey 整理而成
可以使用一点PHP来确定当前单元是否已渲染。
在下面的解决方案中,标志$current_unit_rendered
最初设置为false。我们检查是否在当前单元上。如果是,我们设置$unit_class
变量设置为适当的字符串,并更新标志。利用这些信息,我们知道我们是在当前单元之前还是之后:
<?php
$current_id = get_the_ID();
$current_unit_rendered = false;
$unit_class = \'\';
$the_query = new WP_Query(array(
\'posts_per_page\' => -1, // Ideally, an upper limit like 500 should be used.
\'post_type\' => \'course_unit\',
\'orderby\' => \'menu_order\'
) );
?>
<h4>Your Course Units</h4>
<ul>
<?php if ( $the_query->have_posts() ): while ( $the_query->have_posts() ) : $the_query->the_post();
if ( get_the_ID() === $current_id ) {
$unit_class = \'current-unit\';
$current_unit_rendered = true;
} elseif ( true === $current_unit_rendered ) {
$unit_class = \'future-unit\';
} elseif ( false === $current_unit_rendered ) {
$unit_class = \'previous-unit\';
}
?>
<li><a href="<?php the_permalink(); ?>" class="list-link <?php echo esc_attr( $unit_class) ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>
<?php wp_reset_query(); ?>