【问题标题】:jQuery AJAX call not returning results in WordpressjQuery AJAX 调用未在 Wordpress 中返回结果
【发布时间】:2020-06-19 13:17:26
【问题描述】:

我正在尝试在我的 Wordpress 应用程序中构建一个加载更多按钮,但 AJAX 返回值始终为“成功:假”,即使我知道数据库中有更多帖子。我按照在 YouTube 上找到的教程进行操作,但不确定我缺少什么。

JS

jQuery(document).ready(function () {
  const button = document.getElementById('loadmore');
  button.addEventListener('click', () => {
    let current_page = document.querySelector('#main-content').dataset.page;
    // let max_pages = document.querySelector('#main-content').dataset.max;

    const params = {
      'action': 'load_more_posts',
      'current_page': current_page
    }

    $.post('/wp-admin/admin-ajax.php', params, (data) => {
      console.log(data);
    });
  });
})

PHP (functions.php)

wp_enqueue_script('loadmore', get_template_directory_uri() . '/js/loadmore.js', array('jquery'), filemtime(get_template_directory() . '/js/loadmore.js'));

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() {
    $next_page = $_POST['current_page'] + 1;
    $query = new WP_Query([
        'posts_per_page' => 12,
        'paged' => $next_page
    ]);
    if ($query->has_posts()):
        ob_start();
    while($query->have_posts()) : $query->the_post();
        get_template_parts('partials/blog','posts');
    endwhile;
    wp_send_json_success(ob_get_clean());
    else:
        wp_send_json_error('no more posts');
    endif;
}

返回的结果继续是:

data: "no more posts"
success: false

【问题讨论】:

    标签: php jquery ajax wordpress


    【解决方案1】:

    我也经常想到一件事,你的 ajax 函数应该总是以 wp_die(); 函数调用结束,否则它总是会返回 0,即使你的其余代码是正确的。

    在这种情况下:

    function load_more_posts() {
        $next_page = $_POST['current_page'] + 1;
        $query = new WP_Query([
            'posts_per_page' => 12,
            'paged' => $next_page
        ]);
        if ($query->have_posts()):
            ob_start();
            while($query->have_posts()) : $query->the_post();
                get_template_parts('partials/blog','posts');
            endwhile;
            wp_send_json_success(ob_get_clean());
        else:
            wp_send_json_error('no more posts');
        endif;
    
        wp_die();
    
    }
    

    【讨论】:

    • 嗯,我刚试过,但我仍然得到“数据:'没有更多帖子',成功:假”的返回。为什么我会得到“成功:假”?
    • 我能够完成剩下的工作,但这个答案肯定让我开始了。我缺少的另一件事是,方法 has_posts() 应该是 have_posts()。
    【解决方案2】:

    看起来你传递了错误的当前页码,在 let current_page = document.querySelector('#main-content').dataset.page; ??

    【讨论】:

    • 当前,current_page 变量返回 1。
    • 你确定你要的是正确的帖子类型吗?并且有超过12个帖子?如果您尝试在管理面板中将每页的帖子设置为 30 条左右,您会看到所有帖子吗?
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多