【问题标题】:Creating if statements to filter posts by category from cpt in wordpress创建 if 语句以从 wordpress 中的 cpt 按类别过滤帖子
【发布时间】:2017-09-04 21:27:28
【问题描述】:

我正在尝试将来自 cpt 的帖子放入不同的引导选项卡中。

到目前为止,我在第一个选项卡上获得了所有帖子标题。然后,我在第二个选项卡上获得一个帖子标题,在接下来的两个选项卡上获得相同的标题。这些类别不是自定义分类法,而是与自定义帖子类型相关联的默认 wordpress 类别。自定义帖子类型称为'journal',代码在archive-journal.php中

PHP

<!-- Tab panes -->
<div class="tab-content">

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

            <!-- cambridge winter college -->
            <div role="tabpanel" class="tab-pane active" id="tab1">
                <!-- accordian -->
                    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                        <?php if (in_category('cambridge-winter-college')) ?>
                            <?php the_title(); ?>
                    </div>
                <!-- / accordian -->
                <div class="terminator"></div>
            </div>
            <!-- / cambridge winter college  -->

            <!-- oxford summer 1 -->
            <div role="tabpanel" class="tab-pane" id="tab2">
                <!-- oxford summer college 1 -->
                <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                    <?php if (in_category('oxford_summer_college_1')) ?>
                        <?php the_title(); ?>
                </div>
            </div>
            <!-- / oxford summer 1 -->


            <!-- oxford summer college 2 -->
            <div role="tabpanel" class="tab-pane" id="tab3">
                <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                    <?php if (in_category('oxford_summer_college_2')) ?>
                        <?php the_title(); ?>
                </div> 
            </div>
            <!-- / oxford summer college 2 -->

            <!-- cambridge summer college  -->
            <div role="tabpanel" class="tab-pane" id="tab4">
                <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                    <?php if (in_category('cambridge_summer_college')) ?>
                        <?php the_title(); ?>
                </div>
            </div>
            <!-- /cambridge summer college -->

        <?php endwhile; ?>
    <?php endif; ?> 

</div>
<!-- / tab content -->

关于如何实现这一点的任何想法?

谢谢

【问题讨论】:

    标签: php wordpress custom-post-type


    【解决方案1】:

    您必须重新组织代码的结构。这里的问题是您要显示每个帖子的所有选项卡,因为选项卡位于循环内。

    尝试执行以下操作:

    <div class="tab-content">
        <?php if ( have_posts() ) : ?>
    
            <!-- cambridge winter college -->
            <div role="tabpanel" class="tab-pane active" id="tab1">
                <!-- accordian -->
                <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                     <?php while ( have_posts() ) : the_post(); ?>
                         <?php if (in_category('cambridge-winter-college')) : ?>
                             <?php the_title(); ?>
                         <?php endif; ?>
                     <?php endwhile; ?>
                </div>
                <!-- / accordian -->
                <div class="terminator"></div>
            </div>
            <!-- / cambridge winter college  -->
    
            <?php rewind_posts(); ?>
    
            <!-- REPEAT THE CODE ABOVE FOR OTHER TABS -->
    
        <?php endif; ?>
    </div>
    <!-- / tab content -->
    

    这样您将循环浏览标签内的帖子。

    让我知道这是否有效。

    更新

    在每个循环之间调用rewind_posts()

    【讨论】:

    • 嗨,实际上这似乎有效,但我现在看到其他类别的帖子没有放在页面上。第一个效果很好,但第二个、第三个和第四个选项卡不行!请查看我的完整代码块:stackoverflow.com/questions/43324052/…
    • @vincentieo,您应该更新您的问题,而不是创建一个新问题。无论如何,您可能必须在每个循环之间调用rewind_posts()。查看此页面中的示例:developer.wordpress.org/reference/functions/rewind_posts
    • 我尝试调用 rewind_posts();但遗憾的是它并没有解决问题。在 chrome 检查器中,我可以看到内容应该在哪里有引号,然后有很多空间 == $0 我不知道这意味着什么?
    • 因为它被渲染了,看起来你在&lt;?php?&gt;标签或类似的东西之外有一些PHP代码。
    【解决方案2】:

    经过一番挣扎和思考,我找到了答案。我在 wordpress 阅读设置中将我的最大帖子设置为 10!嗬!因此,通过更改该设置或更好地解决这个问题,这是一个非常简单的修复,我在 css 技巧中发现了这一点。它使用 -1 设置调用 CPT 的所有帖子。将日志更改为您的 cpt 名称。

    PHP

      // CPT all posts in Archive layout
    function set_posts_per_page_for_journal_cpt( $query ) {
      if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'journal' ) ) {
        $query->set( 'posts_per_page', '-1' );
      }
    }
    add_action( 'pre_get_posts', 'set_posts_per_page_for_journal_cpt' );
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2013-10-22
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多