正在尝试添加要发布链接的类

时间:2017-01-24 作者:semidivine

我有一个使用自定义顺序(通过重新排序插件)在自定义帖子类型中循环查询所有帖子

这是我的代码:

<?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或日期来实现,因为这是一个自定义订单),但我无法让它工作。如何将类附加到当前帖子之前的所有帖子?任何帮助都将不胜感激。

2 个回复
最合适的回答,由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(); ?>  

SO网友:Milo

将变量设置为循环之前的类名:

$position = \'class-before\';
然后在if 条件:

if( $post_id == $current_id ) :
    ?> current-unit<?php
    $position = \'class-after\';
endif;

相关推荐

Count top level menu items

我需要得到顶级菜单项的数量。我有5项菜单,其中有1个子菜单。这是目前的情况,但使用我正在构建的主题的用户可能有一些不同的数字。我在主题定制器中创建选项,我需要为每个项目创建选项。我尝试使用如下代码: $menu_object = wp_get_nav_menu_object(\"Main menu\"); $menu_items_count = $menu_object->count; for($x = 1; $x <= $menu_items_