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

WordPress中jQuery AJAX加载更多按钮返回success: false求助

看起来你遇到的核心问题是AJAX请求始终判定没有更多帖子,但数据库里明明还有内容——大概率是分页参数的传递或查询逻辑出了问题。我帮你拆解一下问题点,再给出完整的修复方案:

一、最可能的问题:分页参数不匹配或传递错误

1. 主查询与AJAX查询的每页条数不一致

你的AJAX查询里设置了posts_per_page => 12,但如果WordPress后台「阅读设置」里的「博客页面至多显示」不是12,或者主查询被其他钩子修改了每页条数,就会导致分页计算混乱。比如主查询每页显示10条,那第二页是11-20条,但你的AJAX查询每页查12条,第二页会去查13-24条,自然找不到内容。

2. current_page的类型与更新逻辑缺失

从data-page取到的值是字符串类型,直接做加法可能导致非预期结果;而且你点击按钮后没有更新data-page的值,下次点击还是用初始页码,反复查询同一页。

二、完整修复后的代码示例

修正后的JS代码

jQuery(document).ready(function ($) { 
    const button = document.getElementById('loadmore');
    const mainContent = document.querySelector('#main-content');
    
    button.addEventListener('click', () => { 
        // 把字符串转成数字,避免计算错误
        let currentPage = parseInt(mainContent.dataset.page);
        const maxPages = parseInt(mainContent.dataset.max);
        
        // 已经到最后一页的话,直接禁用按钮
        if (currentPage >= maxPages) {
            button.disabled = true;
            button.textContent = '没有更多文章了';
            return;
        }
        
        const params = {
            'action': 'load_more_posts',
            'current_page': currentPage
        };
        
        // 用本地化的ajax_url更可靠,避免硬编码路径
        $.post(loadmore_params.ajax_url, params, (data) => {
            if (data.success) {
                // 把新文章追加到主内容区
                mainContent.innerHTML += data.data;
                // 更新当前页码,下次点击用新值
                mainContent.dataset.page = currentPage + 1;
            } else {
                button.disabled = true;
                button.textContent = data.data;
            }
        }); 
    }); 
});

修正后的PHP代码(functions.php)

// 注册脚本并传递本地化参数,规范又可靠
function enqueue_loadmore_script() {
    wp_enqueue_script(
        'loadmore', 
        get_template_directory_uri() . '/js/loadmore.js', 
        array('jquery'), 
        filemtime(get_template_directory() . '/js/loadmore.js'), 
        true // 放在页脚加载,避免DOM未就绪问题
    );
    
    // 把ajax地址传递到前端,不用硬写路径
    wp_localize_script('loadmore', 'loadmore_params', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('wp_enqueue_scripts', 'enqueue_loadmore_script');

// 处理登录/未登录用户的AJAX请求
add_action('wp_ajax_nopriv_load_more_posts', 'load_more_posts');
add_action('wp_ajax_load_more_posts', 'load_more_posts');

function load_more_posts() {
    // 先验证参数有效性
    if (!isset($_POST['current_page']) || !is_numeric($_POST['current_page'])) {
        wp_send_json_error('无效的页码参数');
    }
    
    $currentPage = intval($_POST['current_page']);
    $nextPage = $currentPage + 1;
    
    // 直接读取后台设置的每页条数,保持和主查询一致
    $postsPerPage = get_option('posts_per_page') ?: 12;
    
    $query = new WP_Query(array(
        'posts_per_page' => $postsPerPage,
        'paged' => $nextPage,
        'post_type' => 'post', // 指定文章类型,避免歧义
        'post_status' => 'publish' // 只查已发布的文章
    ));
    
    if ($query->have_posts()) :
        ob_start();
        while($query->have_posts()) : $query->the_post();
            // 注意:这里用get_template_part更符合WordPress规范,如果你是自定义的get_template_parts,确保函数正确
            get_template_part('partials/blog', 'posts');
        endwhile;
        wp_reset_postdata(); // 重置查询,避免影响后续内容
        wp_send_json_success(ob_get_clean());
    else:
        wp_send_json_error('no more posts');
    endif;
    
    // 必须退出,防止返回多余内容
    wp_die();
}

模板文件里的主内容区域设置

在你的列表模板(比如index.php或archive.php)里,确保正确设置data-page和data-max:

<div id="main-content" 
     data-page="<?php echo get_query_var('paged') ?: 1; ?>" 
     data-max="<?php echo $wp_query->max_num_pages; ?>">
    <!-- 初始文章列表 -->
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <?php get_template_part('partials/blog', 'posts'); ?>
    <?php endwhile; endif; ?>
</div>

<button id="loadmore">加载更多</button>

三、额外排查点

  1. 检查get_template_part的路径是否正确——你的原代码里写的是get_template_parts(多了个s),如果是自定义函数,确认它能正确渲染单篇文章。
  2. 打开浏览器控制台,查看AJAX请求的参数,确认current_page是否正确传递到后端。
  3. 可以在PHP函数里加调试日志:error_log('Current page: ' . $currentPage . ', Next page: ' . $nextPage);,然后查看wp-content/debug.log文件,确认页码逻辑是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:07:30