You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress主题博客分页需求:实现每页3篇文章自动分页及导航

嘿,这个需求在WordPress里其实挺容易实现的,分几步来就行:

实现每页3篇文章及分页导航的步骤

1. 先在后台调整基础设置

首先登录你的WordPress后台,找到「设置」→「阅读」,在「博客页面最多显示」那里输入3,保存设置。不过这一步有时候会被主题的自定义查询覆盖,所以接下来还要做模板层面的调整,确保万无一失。

2. 确保文章查询正确返回3篇/页

情况一:使用WordPress主循环(推荐)

如果你的博客页面用的是默认的主循环(比如if ( have_posts() ) : while ( have_posts() ) : the_post();这种),最好通过pre_get_posts钩子来修改主查询,避免直接在模板里写自定义循环导致分页失效。

打开主题的functions.php文件,添加下面的代码:

function custom_blog_posts_per_page( $query ) {
    // 只针对前台的博客主查询生效
    if ( $query->is_home() && $query->is_main_query() && !is_admin() ) {
        $query->set( 'posts_per_page', 3 );
    }
}
add_action( 'pre_get_posts', 'custom_blog_posts_per_page' );

这样就能确保博客页面的主查询每页只取3篇文章,而且不会影响后台或者其他页面的查询。

情况二:使用自定义WP_Query

如果你的博客页面用的是自定义循环(比如$custom_query = new WP_Query( $args );),那要在查询参数里明确设置posts_per_page,同时还要加上paged参数来支持分页:

// 获取当前页码,默认是1
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$args = array(
    'posts_per_page' => 3,
    'paged' => $paged,
    // 其他你需要的参数,比如分类、排序等
);

$custom_query = new WP_Query( $args );

// 然后是循环代码
if ( $custom_query->have_posts() ) :
    while ( $custom_query->have_posts() ) : $custom_query->the_post();
        // 你的文章内容模板,比如标题、摘要等
        the_title( '<h2>', '</h2>' );
        the_excerpt();
    endwhile;

    // 这里放分页导航代码,后面会说
endif;

// 重置查询
wp_reset_postdata();

3. 添加分页导航按钮

不管用主循环还是自定义循环,都可以用WordPress内置的函数来生成分页导航:

针对主循环

在主循环结束后(endwhile;之后,endif;之前或之后),添加:

the_posts_pagination( array(
    'mid_size' => 2, // 当前页码前后显示几个页码
    'prev_text' => __( '上一页', 'your-theme-text-domain' ), // 上一页文本
    'next_text' => __( '下一页', 'your-theme-text-domain' ), // 下一页文本
) );

这个函数会自动生成带有样式的分页链接,你可以通过自定义CSS调整它的外观,让它适配你的主题风格。

针对自定义循环

如果是自定义WP_Query,需要用paginate_links()函数,因为the_posts_pagination()只针对主循环:

echo paginate_links( array(
    'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
    'total'        => $custom_query->max_num_pages, // 总页数,来自自定义查询
    'current'      => max( 1, get_query_var( 'paged' ) ), // 当前页码
    'format'       => '?paged=%#%',
    'show_all'     => false,
    'type'         => 'list',
    'end_size'     => 1,
    'mid_size'     => 2,
    'prev_next'    => true,
    'prev_text'    => __( '上一页', 'your-theme-text-domain' ),
    'next_text'    => __( '下一页', 'your-theme-text-domain' ),
    'add_args'     => false,
    'add_fragment' => '',
) );

同样,你可以通过CSS美化这个分页列表,比如去掉默认的列表符号,改成按钮样式等。

4. 测试分页功能

保存所有修改后,去你的博客页面看看,应该每页只显示3篇文章,底部有上一页/下一页和页码导航。点击导航按钮,应该能正确跳转到对应的页面,显示对应的文章。

如果遇到分页失效(比如点击第二页还是显示第一页的内容),大概率是自定义循环没加paged参数,或者主查询被其他函数覆盖了,检查一下functions.php里有没有其他修改posts_per_page的代码,或者自定义循环的参数是否正确。


内容的提问来源于stack exchange,提问作者Aljosa Boskovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:36:14