在 WordPress 网站实现点击加载下一页文章列表的功能,能够为用户带来更流畅的浏览体验,避免传统分页方式频繁刷新页面。下面为你详细介绍实现步骤:

1. 前端模板准备


首先要确保文章列表已经正确显示在页面上,同时为文章列表容器和加载按钮添加合适的 HTML 结构。以主题的 index.php 文件为例:
收起
html
<div id="post-list">
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
        'posts_per_page' => 5,
        'paged' => $paged
    );
    $query = new WP_Query($args);

    if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
            ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <div class="entry-content">
                    <?php the_excerpt(); ?>
                </div>
            </article>
            <?php
        endwhile;
        wp_reset_postdata();
    endif;
    ?>
</div>
<button id="load-more-posts">加载更多文章</button>

上述代码中,#post-list 是文章列表的容器,#load-more-posts 是用于触发加载下一页文章的按钮。

2. 引入 JavaScript 文件


在主题的 functions.php 文件中引入自定义的 JavaScript 文件,并传递必要的参数:
收起
php
function enqueue_load_more_scripts() {
    wp_enqueue_script(
        'load-more-script',
        get_template_directory_uri() . '/js/load-more.js',
        array('jquery'),
        '1.0',
        true
    );
    wp_localize_script(
        'load-more-script',
        'load_more_params',
        array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'posts_per_page' => 5,
            'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1
        )
    );
}
add_action('wp_enqueue_scripts', 'enqueue_load_more_scripts');

这段代码将 load-more.js 文件引入到页面中,并通过 wp_localize_script 函数传递了 AJAX 请求的 URL、每页显示的文章数量和当前页码等参数。

3. 编写 JavaScript 代码


在主题的 js 文件夹下创建 load-more.js 文件,并添加以下代码:
收起
javascript
jQuery(document).ready(function ($) {
    $('#load-more-posts').on('click', function () {
        var button = $(this);
        var paged = parseInt(load_more_params.paged) + 1;

        $.ajax({
            url: load_more_params.ajax_url,
            type: 'POST',
            data: {
                action: 'load_more_posts',
                paged: paged,
                posts_per_page: load_more_params.posts_per_page
            },
            beforeSend: function () {
                button.text('加载中...').prop('disabled', true);
            },
            success: function (response) {
                if (response) {
                    $('#post-list').append(response);
                    load_more_params.paged = paged;
                    button.text('加载更多文章').prop('disabled', false);
                } else {
                    button.text('没有更多文章了').prop('disabled', true);
                }
            },
            error: function () {
                button.text('加载出错,请重试').prop('disabled', false);
            }
        });
    });
});

该代码监听了 “加载更多文章” 按钮的点击事件,当按钮被点击时,通过 AJAX 请求加载下一页的文章。在请求发送前,将按钮文本改为 “加载中...” 并禁用按钮;请求成功后,将新的文章列表追加到 #post-list 容器中,并更新当前页码;若没有更多文章,则将按钮文本改为 “没有更多文章了” 并禁用按钮;若请求出错,则显示错误提示。

4. 处理 AJAX 请求


在主题的 functions.php 文件中添加处理 AJAX 请求的代码:
收起
php
function load_more_posts() {
    $paged = $_POST['paged'];
    $posts_per_page = $_POST['posts_per_page'];

    $args = array(
        'posts_per_page' => $posts_per_page,
        'paged' => $paged
    );
    $query = new WP_Query($args);

    if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
            ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <div class="entry-content">
                    <?php the_excerpt(); ?>
                </div>
            </article>
            <?php
        endwhile;
        wp_reset_postdata();
    endif;

    wp_die();
}
add_action('wp_ajax_load_more_posts', 'load_more_posts');
add_action('wp_ajax_nopriv_load_more_posts', 'load_more_posts');

这段代码接收 AJAX 请求传递的页码和每页文章数量参数,根据这些参数查询文章,并将文章列表以 HTML 格式返回给前端。
通过以上步骤,你就可以在 WordPress 网站实现点击加载下一页文章列表的功能了。