带有ajax处理程序的WP_Query返回相同的帖子

时间:2013-04-10 08:03:28

标签: ajax wordpress jquery

我有一个让我秃顶的问题。我有一个ajax调用,它处理一个处理一些查询并为我返回帖子的循环。

到目前为止一切顺利,但是当用户第一次看到页面时我们应该加载10个帖子,然后我们要点击一个按钮再请求5个帖子。

到目前为止一切顺利。

但是当我们要求再增加5个帖子时,我们会再次获得5个帖子。

我的批处理循环

<?php   
// Our include  
define('WP_USE_THEMES', false);  
require_once('../../../wp-load.php');  

// Our variables  
$posts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;  
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;  
$category = (isset($_GET['category_name'])) ? $_GET['category_name'] : 0;  

var_dump($posts);

$args = array(  
    'posts_per_page' => $posts,
    'category_name'  => $category, 
    'post_status'    => 'publish',
    'orderby'        => 'date',
    'order'          => 'DESC',
    'paged'          => $page 
);

query_posts($args);  

// $query = new WP_query($args);

// our loop  
if (have_posts()) {  

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts($args);

       while (have_posts()){  
              the_post();  

              get_template_part( 'thumbs', get_post_format() );  
       }  
} 

// unset($page, $posts, $category);

// wp_reset_postdata();
wp_reset_query();
?> 

有人看到我做错了吗?

编辑:

批处理程序

 function _batchhandler() { 
        var getamount = localStorage.getItem('amount'); 

        console.log('amount of posts to retrive ' + JSON.parse(getamount));

        // Ajax call
        $.ajax({
            type: 'GET',
            data: {
                posts: getamount, 
                page: page,
                category: 'work'
            },
            dataType: 'html',
            url: 'http://dev.xxx.se/wp-content/themes/xxx/batch.php',
            beforeSend: function() {
                _setHeader;
                if( page != 1 ) {
                    console.log('Loading');
                    // Show the preloader
                    $('body').prepend('<div class="preloader"><span class="rotate"></span></div>');
                }
                // If we reach the end we hide the show more button
                if( page >= total ) {
                    $('.load').hide();
                }
            },
            success: function(data) {
                console.log(page);  
                var scroll = ($('.thumb').height() * posts);
                // If thumbs exist append them
                if( data.length ) { 
                    // Append the data
                    $('#batch').append(data);

                    // Remove the crappy width and height attrs from the image * Generated by WP *
                    $('img').removeAttr('height').removeAttr('width');

                    // Animate each new object in a nice way
                    (function _showitem() {
                        $('#batch .thumb:hidden:first').addClass('show', 80, _showitem);

                        // On the last request do load any more
                        loading = false;  
                    })();

                    // Remove the preloader
                    $('.preloader').fadeOut(200, function() {
                        $('.preloader').remove();   
                    });
                }
                // return false;
            },
            complete: function() {
                // Delete storage
                localStorage.clear();

                // Update the scroller to match the updated content length
                if (scroller)
                    setTimeout("scroller.refresh()", 300);

                // Initalize the load more button
                _clickhandler();
            },
            error: function() {
                console.log('No page found');
            }
        });
    }

和我的加载更多按钮功能

 $('.load').on('click', function(event) {
            event.preventDefault(); 
            // Delete storage
            localStorage.clear();

            if(!loading) {
                loading = true;
                // Increase our pagenumber per click
                page++;
                count++;
                // Remove preloader
                $('.preloader').remove();

                setTimeout(function() {
                    $('#batch').css({
                        '-webkit-transform' : 'translateY(-' + ($('#batch li').outerHeight() * count)  + 'px)'
                    });
                }, 30);

                // Clear storage and set a new
                localStorage.setItem('amount', JSON.stringify(amount.medium));
                var getamount = localStorage.getItem('amount');

                // Send the request to the handler                  
                _batchhandler(page);    
            }      

        });

一切似乎都很好,前10个(1-10)帖子加载应该,但第一次“加载更多”被点击我们得到接下来的5个结果,但结果是第一次加载的帖子(5- 10)。如果我们再次点击“加载更多”,我们会得到正确的结果

2 个答案:

答案 0 :(得分:0)

我认为您没有为页面定义一个起始值,在脚本开头将其设置为1,所以当它在点击时递增时会转到第2页。否则它只会获得第一页。< / p>

答案 1 :(得分:0)

你在后端获取错误的参数,它们都解析为0。 ajax调用发送以下参数:

帖子,页面,类别

但是在你的接收器后端,你试图获取这些变量:

numPosts,pageNumber,category_name

以下内容:

$posts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;  
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;  
$category = (isset($_GET['category_name'])) ? $_GET['category_name'] : 0; 

应该是:

$posts = (isset($_GET['posts'])) ? $_GET['posts'] : 0;  
$page = (isset($_GET['page'])) ? $_GET['page'] : 0;  
$category = (isset($_GET['category'])) ? $_GET['category'] : 0; 

或者更改ajax调用中的参数名称以匹配后端中的参数名称。