Ajax擦除会话变量的值

时间:2018-03-25 16:07:27

标签: ajax wordpress

我最近添加了一个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); 

1 个答案:

答案 0 :(得分:1)

乍一看,我的投注会话没有设定。尝试将此添加到functions.php文件中。

 add_action('init', function() {
if (!session_id()) {
    session_start();
});

这将确保在每个页面上加载会话。值得一提的是,会话并不是保存数据的最佳方式。我建议用cookie替换会话。