AJAX从wp_query获取帖子,防止重复发布

时间:2014-10-25 21:45:39

标签: php ajax wordpress wp-query

我试图在我的博客中加载AJAX帖子,我已经成功地让它以这种方式工作:

页面在页面加载时显示3个帖子,然后每次点击按钮时访问者可以再获得3个帖子"加载更多"。

现在我想在页面加载时加载9个帖子,但每次点击都会保留3个帖子" LOAD MORE"按钮。

WPQuery中的页码值出现问题,它已经显示了相同的3个帖子。

如何防止帖子重复?

请在my temp website

处查看

[请注意,我在类别页面上发布的帖子少于9个,应该加载所有帖子

(function($) {
$(document).ready(function(){
    var $content = $('#list-content');
    var $btnLoad = $('#btnLoad');
    var loading = true;
    var page = 1;
    var load_posts = function($count){
        var post_id = $(this).attr( 'id' );
        /** Ajax Call */
        $.ajax({
            cache       :   false,
            timeout     :   8000,
            url         :   php_array.admin_ajax,
            type        :   "POST",
            data        :   {action:'main_query', numPosts : $count, pageNumber: page, condition: php_array.condition, val: php_array.val},

            beforeSend  :   function() {
                $('#loadimg').slideToggle("fast");
                $btnLoad.prop("disabled",true);
            },
            success     : function(data, textStatus, jqXHR ){
                var $data = $( data );
                if($data.length){
                    $content.append( $data );
                    $btnLoad.prop("disabled",false);
                }
                else{
                    $btnLoad.html("That's it");
                    $btnLoad.prop("disabled",true);
                }
            },
            error       : function( jqXHR, textStatus, errorThrown ){
                if(t==="timeout") {
                    alert("Server is too slow, try again later");
                } else {
                    alert(t);
                }
                console.log( 'ajaxLoop.js: The following error occured: ' + textStatus, errorThrown );  
            },
            complete    : function( jqXHR, textStatus ){
                $('#loadimg').slideToggle("fast");
                loading = false;
                page++;
            }
        });
    }
    $btnLoad.on("click", function(e) { 
        e.preventDefault();
        loading = true;
        load_posts(3);
    });
    load_posts(9);  //load the first elements
});

})(jQuery);

PHP代码:

function main_query_init() {
/** Made Query */
$numPosts = (isset($_POST['numPosts'])) ? $_POST['numPosts'] : 0;
$page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;
$condition = (isset($_POST['condition'])) ? $_POST['condition'] : '';
$val = (isset($_POST['val'])) ? $_POST['val'] : '';
$args = array(
        'posts_per_page'=>  $numPosts,
        'paged'         =>  $page,
    );
if($condition != ''){
    $args[$condition] = $val;
}
$post_query = new WP_Query( $args );
if ($post_query->have_posts()) : while ($post_query->have_posts()) : $post_query->the_post();

2 个答案:

答案 0 :(得分:0)

您可能正在为WP_Query寻找offset parameter。将其设置为3会导致在使用posts_per_pagepaged时跳过前3个结果。

另一个选项是指定您不希望显式使用post__not_in parameterpost_id,但这需要传递值数组以便在每个请求中排除 - 您可能能够只是传递前3个ID,但我会选择offset

答案 1 :(得分:0)

关键是var currCount = $data.filter('article').length; 其中我存储了ajax响应中当前帖子的数量。

由于我要求每个加载按钮点击额外3个帖子,然后if((currCount % 3) == 0)会告诉我它是否有3个帖子,否则没有更多帖子,并且无需增加page个计数器。< / p>

success     : function(data, textStatus, jqXHR ){
    var $data = $( data );
    var currCount = $data.filter('article').length;
    totalCount += currCount;
    if(currCount > 0){
        $content.append( $data );
        $btnLoad.prop("disabled",false);

        if((currCount % 3) == 0)
            page += currCount / 3;
        else 
            page += (parseInt(totalCount/3) + 1);
        return;
    }
    $btnLoad.html("That's it");
    $btnLoad.prop("disabled",true);
},