在第一个博客列表页面上显示不同数量的帖子

时间:2019-08-28 作者:Kai

我不知道如何更改仅在第一个博客页面上列出的帖子数量。我需要在第一页列出4个正常帖子,在任何其他页面列出6个正常帖子。我在StackExchange上找到了一些例子,但我的案例略有不同,因为我在第一页上也有特色帖子,属于特色类和其他4篇普通帖子。从第二页开始,没有显示特色帖子,只有6篇普通帖子。

这段代码对特色帖子的效果非常好,但找不到改变正常帖子显示数量的方法。每次我添加new WP_Query() 对于第二个循环,特色贴子停止工作。

<ul class="grid grid--blog">
    <?php $do_not_duplicate = 0;
        if(!is_paged()):
            $featured = new WP_Query(\'category_name=featured&posts_per_page=1\');
            while ($featured->have_posts()) : $featured->the_post();
                $do_not_duplicate = $post->ID; ?>
                <li class="grid__item grid__item-featured"><?php get_template_part( \'entry\' ); ?></li>
            <?php endwhile;
        endif;

        if (have_posts()) : 
            while (have_posts()) : the_post(); 
                if( $post->ID == $do_not_duplicate ) continue; ?>
                <li class="grid__item"><?php get_template_part( \'entry\' ); ?></li>
            <?php endwhile; 
        endif; 
    ?>
</ul>
这是所需的布局:

第一个博客列表页面

first blog listing page

所有其他博客列表页面

all other blog listing pages

任何帮助都将不胜感激!

1 个回复
最合适的回答,由SO网友:Kai 整理而成

我花了一段时间才意识到这一点,但最终,我成功了。如果其他人希望实现类似的布局,我将在此处分享我的解决方案:

<ul class="post preview grid grid--blog">
    <?php $do_not_duplicate = 0 ?>
    <?php if(!is_paged()): ?>
        <?php $args = array(
            \'category_name\' => \'featured\',
            \'posts_per_page\' => 1
        );
        $featured = new WP_Query( $args );

        while ( $featured->have_posts() ) : $featured->the_post(); 
            $do_not_duplicate = $post->ID; ?>
            <li class="grid__item grid__item-featured"><?php get_template_part( \'entry\' ); ?></li>
        <?php endwhile;
    endif; 
    wp_reset_query(); ?>

    <?php 
    $featuredid = get_cat_ID( \'Featured\' );
    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

    if(!is_paged()) {
        $postsargs = array(
            \'posts_per_page\'        => 4,
            \'post_status\'           => \'publish\',
            \'ignore_sticky_posts\'   => 1,
            \'cat\'                   => - $featuredid,
            \'paged\'                 => $paged
        );
        $allposts = new WP_Query( $postsargs );
    } else {
        $secondPageArgs = array(
            \'posts_per_page\'        => 6,
            \'post_status\'           => \'publish\',
            \'ignore_sticky_posts\'   => 1,
            \'cat\'                   => - $featuredid,
            \'paged\'                 => $paged
        );
        $allposts = new WP_Query( $secondPageArgs );
    }

    if ( $allposts->have_posts() ) : 
        while ( $allposts->have_posts() ) : $allposts->the_post(); 
            if( $post->ID == $do_not_duplicate ) continue; ?>
            <li class="grid__item"><?php get_template_part( \'entry\' ); ?></li>
        <?php endwhile; 
    endif;

    wp_reset_query(); ?>
</ul>
所以$do_not_duplicate 确保在列出所有其他帖子时,不要重复第二个查询中第一个查询中的特色帖子。

然后包装我们的第二个查询$allposts IF语句中的参数,用于检查这些帖子将显示在哪个页面上。如果我们在第一个博客页面上,\'posts_per_page\' => 4 将被调用,否则\'posts_per_page\' => 6 将在所有其他页面上调用。

希望有帮助!

相关推荐

使用page.php而不是page-{slug}.php列出页面

我为特定的Slug制作了一个视图模板第1-220页使用第页。php联系人使用页面联系人。php服务使用页面服务。php现在,我想在一个包含页面概述的“概述”页面上列出页面及其模板。php模板。我试过这个:<?php $args = array( \'post_type\' => \'page\', /* or just \'post\' */ \'posts_per_page\' => -1, ); $the_query = new WP_Qu