我试图在我的博客中加载AJAX帖子,我已经成功地让它以这种方式工作:
页面在页面加载时显示3个帖子,然后每次点击按钮时访问者可以再获得3个帖子"加载更多"。
现在我想在页面加载时加载9个帖子,但每次点击都会保留3个帖子" LOAD MORE"按钮。
WPQuery中的页码值出现问题,它已经显示了相同的3个帖子。
如何防止帖子重复?
处查看[请注意,我在类别页面上发布的帖子少于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();
答案 0 :(得分:0)
您可能正在为WP_Query
寻找offset
parameter。将其设置为3
会导致在使用posts_per_page
和paged
时跳过前3个结果。
另一个选项是指定您不希望显式使用post__not_in
parameter的post_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);
},