【问题标题】:Wordpress Multiple Loops - Query Single Most Recent Post - Separate Class for Each PostWordpress 多个循环 - 查询单个最近的帖子 - 每个帖子的单独类
【发布时间】:2012-05-12 14:21:44
【问题描述】:

我的目标是使用多个 wordpress 循环分别为给定类别中的每个帖子设置样式。我确实相信除了实际查询之外,我大部分都已经弄清楚了..

我需要能够在第一个循环中查询一个类别中的 {MOST RECENT} 帖子,然后在第二个循环中查询一个类别中的第二个最近的帖子,然后在下一个循环中查询第三个最近的帖子,使我能够为每个类设置单独的类和样式。

任何帮助都会很棒+++!!

<?php if (have_posts()) : ?>
           <?php query_posts('category_name=Main&posts_per_page=1&={MOST RECENT}'); ?>
               <?php while (have_posts()) : the_post(); ?>    

                            <div class="row1">
                                <div class="one">
                                    <div class="post_data">
                                        <div class="icons_right"><img src="pop_out_icon.png" alt="pop out icon" /></div>
                                        <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
                                        <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
                                        <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
                                    </div> <!-- post_data //-->
                                <?php the_content(); ?>
                            </div>  <!-- 1 //-->
               <?php endwhile; ?>

                 <?php query_posts('category_name=Main&posts_per_page=1&={SECOND MOST RECENT}'); ?>
               <?php while (have_posts()) : the_post(); ?>    

                            <div class="row2">
                                <div class="two">
                                    <div class="post_data">
                                        <div class="icons_right"><img src="pop_out_icon.png" alt="pop out icon" /></div>
                                        <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
                                        <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
                                        <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
                                    </div> <!-- post_data //-->
                                <?php the_content(); ?>
                            </div>  <!-- 2 //-->
               <?php endwhile; ?>

     <?php endif; ?>

【问题讨论】:

    标签: php wordpress loops


    【解决方案1】:

    我注意到,尽管您想使用不同的循环来定义唯一的类,但您的循环块在很大程度上是相同的。如果您只想更改元素的类,则无需使用三个单独的循环,因为这会使您的模板变得混乱并最终比使用单个循环慢得多。

    您还应该避免使用 query_posts,因为它会覆盖默认的 Wordpress 循环,并且可能会产生意想不到的后果,尤其是在您忘记重置查询时。

    循环中帖子的顺序默认为最近的帖子,因此您无需担心设置排序参数。

    使用您的示例,我根据循环经过的迭代次数对所有内容进行了重新设计,以将动态类应用于您的包装器。请记住,您可以使用帖子本身的属性来定义您的类以使其唯一(在这种情况下,使用帖子 ID):

    <?php
    $count = 0;
    $postsPerRow = 4; //<-- This will help set your top wrapper
    $query = new WP_Query('category_name=Main&posts_per_page=3');
    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
    if($count<(floor($query->found_posts/$postsPerRow)*$postsPerRow)){
        $open = !($count%$postsPerRow) ? '<div class="row row-'.(floor($count/$postsPerRow)+1).'">' : '';
        $close = !($count%$postsPerRow) && $count ? '</div>' : '';
        echo $close.$open;
    ?>    
        <div class="<?php echo "loop-$count post-".get_the_ID(); ?>">
            <div class="post_data">
                <div class="icons_right">
                    <img src="pop_out_icon.png" alt="pop out icon" />
                </div>
                <h1 class="post_title">
                    <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                </h1>
                <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
                <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
            </div> <!-- post_data //-->
            <?php the_content(); ?>
        </div>  <!-- 1 //-->
    <?php
    $count++;
    }
    endwhile;endif;
    echo $count ? '</div>' : ''; //<-- Close row wrapper
    ?>
    

    更新:现在您的顶级包装器将每行存储 4 个帖子。这可以根据需要通过 $postsPerRow 变量进行调整,并且您可以随时根据需要增加 Posts_per_page 参数。

    编辑 2: 使用 WP Query 具有分离出您可能需要的值的额外好处。查看代码以更新您的最新问题。

    【讨论】:

    • 这绝对有帮助,我将设置它并尝试它,并在我有后尽快回复此帖子并回复您,感谢您的指导和辛勤工作。跨度>
    • 嗯,你绝对给了我一个很好的开端!太感谢了!此时它在每一行中放置一个帖子......我实际上每行需要4个单独的帖子,总共将有4行,然后如果之后有任何其他帖子,它将返回到第1行并开始循环结束?谢谢!!!
    • 我刚刚注意到在我的原始消息中我让它在第二个循环中重复第 1 行,这是无意的,我打算将前几个帖子保留在第 1 行中,然后显示下一组帖子在第 2 行,这是我的错误,我深表歉意。
    • @joeldalmas 请查看更新后的代码。这应该可以满足您的需求。
    • 你的人,DOH,我误解了这个查询,感觉很傻:-\ 我更像一个 UI 人而不是 php 人:X 非常感谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2021-04-25
    • 2021-05-17
    • 2017-08-28
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多