你有几件事要考虑。
让我们以浏览器的方式开始。
您构建了HTML,目前为止还不错,包含了站点的结构和所有内容。未显示文章。
浏览器要做的下一步是进行AJAX调用。
以下是首先要考虑的事情。在您的文档中。ready函数您不会将帖子的偏移量发送到AJAX php函数。据我从您的代码中所知,在调用函数时,您总是希望显示5篇文章。
因此,请考虑:
起初,计数为0。每次成功重新加载,计数将增加5。您应该将此部分放入AJAX调用的成功部分。此外,AJAX php函数必须知道要传递的帖子的偏移量。
另一件需要考虑的事情是,您的站点上可能有另一个查询,而不是AJAX函数中的查询。所以要确保var total
是正确的数字,但我现在不会再深入讨论这个问题,把它当作你的了。你明白了。
您的Javascript应如下所示:
jQuery(document).ready(function($) {
var count = 0;
var total = <?php echo $wp_query->max_num_pages; ?>;
$(window).scroll(function(){
if ($(window).scrollTop() == $(document).height() - $(window).height()){
if (count > total){
return false;
}else{
loadArticle(count);
}
}
});
function loadArticle(count){
$(\'a#inifiniteLoader\').show(\'fast\');
// I prefer doing the ajaxdata with an array
var ajaxdata = {
\'action\' : \'infinite_scroll\'
\'offset\' : count
}
$.ajax({
url: "<?php bloginfo(\'wpurl\') ?>/wp-admin/admin-ajax.php",
type:\'POST\',
data: ajaxdata,
success: function(html){
$(\'a#inifiniteLoader\').hide(\'1000\');
$("#content").append(html); // This will be the div where our content will be loaded
count = count + 5; // Increase the number of posts that are already shown.
}
});
return false;
}
});
正如您所看到的,我为ajaxdata创建了一个数组——这样看更容易。我还删除了
loopfile=loop
, 正如你在后面看到的,因为我会用另一种方式来回答。
到目前为止还不错——现在我们应该考虑构建稍微不同的AJAX响应。你注册的方式是对的,但我不会用get_template_part
, 执行另一个函数,传递变量。
AJAX函数的注册如下:
add_action(\'wp_ajax_infinite_scroll\', \'wp_infinitepaginate\'); // for logged in user
add_action(\'wp_ajax_nopriv_infinite_scroll\', \'wp_infinitepaginate\'); // if user not logged in
function wp_infinitepaginate(){
load_ajax_results($_POST[\'count\']);
exit;
}
最后一步是将输出放在一起的实际函数。你可以把这个放在任何地方
functions.php
或其他文件。我更喜欢创建文件
ajax-functions.php
包括在我的
functions.php
, 包含上述所有函数(当然Javascript除外)
<?php
function load_ajax_results( $offset ) {
// I use the $_POST[\'count\'] as $offset here
?>
<div class="post-left">
<?php
$args = array(
\'numberposts\' => \'2\', // 2 Posts to show here
\'offset\' => $offset // the number of Posts to skip, given by the AJAX call
);
query_posts( $args ); // nothing else should be needed
if (have_posts()) : while (have_posts()) : the_post();
?>
<div class="images-grid-page-wrapper">
<?php the_title(); ?>
</div>
<?php endwhile; endif; // End the loop. Whew. ?>
<?php wp_reset_query(); // reset it ?>
</div>
<div class="post-mid">
<?php
$offset = $offset + 2; // because we had 2 Posts before
$args = array(
\'numberposts\' => \'3\', // 3 Posts to show here
\'offset\' => $offset // the number of Posts to skip, given by the AJAX call
);
query_posts( $args ); // nothing else should be needed
if (have_posts()) : while (have_posts()) : the_post();
?>
<div class="images-grid-page-wrapper">
<?php the_title(); ?>
</div>
<?php endwhile; endif; // End the loop. Whew. ?>
</div>
<?php
}
?>
当我在这里使用偏移量时,我不必检查之前是否已经显示过任何帖子。
您遇到的主要问题是在考虑AJAX函数时出错。此函数不知道浏览器中发生了什么,因此您必须告诉它要显示哪些帖子。每次调用它时,它都是一个新实例,因此不会存储上次传递的帖子的值。
没有在我的安装上测试这个,但我希望你了解它背后的想法。如果有任何错误,对不起,如果有任何问题,请评论:)