尝试在WP_Query()帖子网格上进行分页

时间:2020-01-17 作者:Devon

因此,我一直在开发自己的主题作为一种学习体验,对于如何让分页工作起来,我感到困惑。在谈到这一点并提出问题之前,我已经尝试了好几件事,我只是似乎错过了一些东西。

这是在一个“静态Frontpage”上,这就是为什么$paged至少称为“page”,这是我的研究揭示的一件事。

    <?php while ( have_posts() ) : the_post(); ?>
        <h2>Recent Posts</h2>

            <?php
                 $paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
                $Post = array(
                    \'post_type\'      => \'post\',
                    \'posts_per_page\' => 4,
                    \'orderby\'     => \'modified\',
                    \'order\'       => \'DESC\',
                    \'paged\' => $paged
                );
                $q    = new WP_Query( $Post );
            ?>
            <div class="grid row posts">
                <?php while ( $q->have_posts() ) : $q->the_post(); ?>
                <div class="col">
                    <div class="date-container">
                        <p class="post-date bg-darkpurple">
                            <?php 
                            //echo get_the_date()
                                $u_time = get_the_time(\'U\');
                                $u_modified_time = get_the_modified_time(\'U\');
                                    if ($u_modified_time >= $u_time + 86400) {
                                echo "Last updated ";
                                    the_modified_time(\'F jS, Y\');
                                echo ""; }
                                else {echo "Posted "; the_time(\'F jS, Y\');}
                            ?>
                        </p>
                    </div>
                    <?php
                        $perma_cat = get_post_meta($post->ID , \'_category_permalink\', true);
                            if ( $perma_cat != null ) {
                                $cat_id = $perma_cat[\'category\'];
                                $category = get_category($cat_id);
                            } else {
                                $categories = get_the_category();
                                $category = $categories[0];
                            }
                                $category_link = get_category_link($category);
                                $category_name = $category->name;  
                            ?>

                        <picture class="post-thumb block">

                            <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(\'medium\'); ?></a>
                            <div class="cat-container">
                                <a class="post-cat bg-darkpurple" href="<?php echo $category_link ?>"><?php echo $category_name ?></a>
                            </div>

                        </picture>

                        <h3>
                            <a href="<?php the_permalink(); ?>">
                                <?php the_title(); ?>
                            </a>
                        </h3>
                            <?php echo \'<p class="excerpt">\' . get_the_excerpt(). \'</p>\'; ?>
                </div>
                <?php endwhile; ?>
            </div>
                <div class="pagination">
                    <?php 
                        echo paginate_links( array(
                        \'base\'         => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
                        \'total\'        => $query->max_num_pages,
                        \'current\'      => max( 1, get_query_var( \'page\' ) ),
                        \'format\'       => \'?page=%#%\',
                        \'show_all\'     => false,
                        \'type\'         => \'plain\',
                        \'end_size\'     => 2,
                        \'mid_size\'     => 1,
                        \'prev_next\'    => true,
                        \'prev_text\'    => sprintf( \'<i></i> %1$s\', __( \'Newer Posts\', \'text-domain\' ) ),
                        \'next_text\'    => sprintf( \'%1$s <i></i>\', __( \'Older Posts\', \'text-domain\' ) ),
                        \'add_args\'     => false,
                        \'add_fragment\' => \'\',
                    ) );
                    ?>
                </div>
            <?php wp_reset_postdata(); ?>
        <?php endwhile; ?>
感谢您提供的任何见解

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

如果设置为静态首页,为什么要分页?

将帖子分页网格作为首页的正确方法是将主页设置为“您的最新帖子”。然后,您将开发front-page.php, home.phpindex.php 将帖子显示为网格的模板(使用Template Hierarchy 以确定所需的文件)。

在该模板中,您不需要使用WP_Query$paged 或诸如此类的事情。仅主回路:

<h2>Recent Posts</h2>

<div class="grid row posts">
    <?php while ( have_posts() ) : the_post(); ?>
        <div class="col">
            <!-- Post markup goes here. -->
        </div>
    <?php endwhile; ?>
</div>

<div class="pagination">
    <?php 
    echo paginate_links( array(
        \'end_size\'     => 2,
        \'mid_size\'     => 1,
        \'prev_text\'    => sprintf( \'<i></i> %1$s\', __( \'Newer Posts\', \'text-domain\' ) ),
        \'next_text\'    => sprintf( \'%1$s <i></i>\', __( \'Older Posts\', \'text-domain\' ) ),
    ) );
    ?>
</div>
请注意我所做的其他更改:

分页链接应位于while 循环paginate_links() 因为它们要么由于正确的循环结构而不必要,要么因为它们只是设置为默认值WP_Query 分页是我在这个网站上看到的最常见的错误,所以我很好奇你是从哪里想到你需要做一个new WP_Query, 因为在任何标准模板中,帖子的主列表都不需要这样做,但我几乎每天都看到这样做。有没有一个教程在那里传播这一点,或者在官方文件中有暗示这一点的东西?