如何在自定义WP_Query Ajax上实现分页

Jan*_*ith 2 php ajax wordpress jquery pagination

我想用Ajax在自定义循环中对我的WordPress帖子进行分页,所以当我点击加载时会出现更多按钮帖子.

我的代码:

<?php 
    $postsPerPage = 3;
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $postsPerPage,
        'cat' => 1
    );
    $loop = new WP_Query($args);

    while ($loop->have_posts()) : $loop->the_post();
?>
<h1><?php the_title(); ?></h1>
<p>
    <?php the_content(); ?>
</p>
<?php
    endwhile; 
    echo '<a href="#">Load More</a>';
    wp_reset_postdata(); 
?>
Run Code Online (Sandbox Code Playgroud)

此代码不分页.有一个更好的方法吗?

Kiv*_*ius 22

该Load More按钮需要向ajax服务器发送请求,并且可以使用jQuery或普通javascript将返回的数据添加到现有内容中.假设您使用jQuery,这将启动代码.

自定义Ajax处理程序(客户端)

<a href="#">Load More</a>
Run Code Online (Sandbox Code Playgroud)

改成:

<a id="more_posts" href="#">Load More</a>
Run Code Online (Sandbox Code Playgroud)

Javascript: - 把它放在文件的底部.

//</script type="text/javascript">

    var ajaxUrl = "<?php echo admin_url('admin-ajax.php')?>";
    var page = 1; // What page we are on.
    var ppp = 3; // Post per page

    $("#more_posts").on("click",function(){ // When btn is pressed.
        $("#more_posts").attr("disabled",true); // Disable the button, temp.
        $.post(ajaxUrl, {
            action:"more_post_ajax",
            offset: (page * ppp) + 1,
            ppp: ppp
        }).success(function(posts){
            page++;
            $(".name_of_posts_class").append(posts); // CHANGE THIS!
            $("#more_posts").attr("disabled",false);
        });

   });

//</script>
Run Code Online (Sandbox Code Playgroud)

自定义Ajax处理程序(服务器端) PHP - 将它放在functions.php文件中.

function more_post_ajax(){
    $offset = $_POST["offset"];
    $ppp = $_POST["ppp"];
    header("Content-Type: text/html");

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $ppp,
        'cat' => 1,
        'offset' => $offset,
    );

    $loop = new WP_Query($args);
    while ($loop->have_posts()) { $loop->the_post(); 
       the_content();
    }

    exit; 
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');
Run Code Online (Sandbox Code Playgroud)

  • 只需使用`paged`而不是`offset`. (2认同)