我最近添加了一个Ajax驱动的加载更多按钮,可以将更多博客帖子加载到我的wordpress网站。我使用了这里列出的教程:https://rudrastyh.com/wordpress/load-more-posts-ajax.html,它有效,但我遇到了另一个问题。
我有一个会话变量来计算当前的帖子号码。我每页显示10个帖子,并且计数器适用于最初的10个。然后我用ajax调用下一个10,而不是计数到11,12,13等,它会回到1.显然有一个传递结束值的问题(10)从模板到函数中的ajax处理程序。谁知道什么可能是错的?如果我不使用ajax,一切都会有效 - 这真的令人沮丧。
模板PHP
<?php $_SESSION['the_counter'] = 0; ?>
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 10,
'paged' => $paged
);
$my_query = new WP_Query($args);
if($my_query->have_posts()): while($my_query->have_posts()) : $my_query->the_post();
get_template_part( 'template-parts/post/content', get_post_format() );
endwhile;
else:
get_template_part( 'no-results', 'home' );
endif;
if ( $my_query->max_num_pages > 1 ){
echo '</a><div class="misha_loadmore">More posts</div>';
}?>
</div>
<script>var posts_myajax = '<?php echo json_encode( $my_query->query_vars ) ?>',
current_page_myajax = 1,
max_page_myajax = <?php echo $my_query->max_num_pages ?>
</script>
<script src="/loadmore.js"></script>
<?php $my_query = null;
wp_reset_postdata();?>
functions.php中的Ajax处理程序
function misha_loadmore_ajax_handler(){
$args = json_decode( stripslashes( $_POST['query'] ), true );
$args['paged'] = $_POST['page'] + 1; // we need next page to be loaded
$args['post_status'] = 'publish';
query_posts( $args );
if( have_posts() ) :
// run the loop
while( have_posts() ): the_post();
// look into your theme code how the posts are inserted, but you can use your own HTML of course
// do you remember? - my example is adapted for Twenty Seventeen theme
get_template_part( 'template-parts/post/content', get_post_format() );
// for the test purposes comment the line above and uncomment the below one
// the_title();
endwhile;
endif;
die; }
add_action('wp_ajax_loadmore', 'misha_loadmore_ajax_handler');
add_action('wp_ajax_nopriv_loadmore', 'misha_loadmore_ajax_handler');
加载更多JS
jQuery(function($){
$('.misha_loadmore').click(function(){
var button = $(this),
data = {
'action': 'loadmore',
'query': misha_loadmore_params.posts, // that's how we get params from wp_localize_script() function
'page' : misha_loadmore_params.current_page
};
$.ajax({
url : misha_loadmore_params.ajaxurl, // AJAX handler
data : data,
type : 'POST',
beforeSend : function ( xhr ) {
button.text('Loading...'); // change the button text, you can also add a preloader image
},
success : function( data ){
if( data ) {
button.text( 'More posts' ).prev().before(data); // insert new posts
misha_loadmore_params.current_page++;
if ( misha_loadmore_params.current_page == misha_loadmore_params.max_page )
button.remove(); // if last page, remove the button
// you can also fire the "post-load" event here if you use a plugin that requires it
// $( document.body ).trigger( 'post-load' );
} else {
button.remove(); // if no data, remove the button as well
}
}
});
});});
这是我在博客文章内容模板文件顶部的会话代码。每个帖子的计数增加1。
$counter = $_SESSION['the_counter'];
$counter++;
$_SESSION['the_counter'] = $counter;
在文件的底部,我包括:
echo insert_counter($the_counter);
答案 0 :(得分:1)
乍一看,我的投注会话没有设定。尝试将此添加到functions.php文件中。
add_action('init', function() {
if (!session_id()) {
session_start();
});
这将确保在每个页面上加载会话。值得一提的是,会话并不是保存数据的最佳方式。我建议用cookie替换会话。