WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

WordPress при AJAX грузит все посты сразу + дублит их?

Пытаюсь по ajax подгружать посты, все бы ничего, но первые 16 выводятся нормально, после срабатывания события, выгружает штук 200 записей, хотя их всего 50, дублит их, а не подгружает по 8

скрипт ajax:

jQuery(function($){
  var canBeLoaded = true, 
	  bottomOffset = 1500; 

  $(window).scroll(function(){
	var data = {
	  'action': 'loadmore',
	  'query': misha_loadmore_params.posts,
	  'page' : misha_loadmore_params.current_page
	};
	if( $(document).scrollTop() > bottomOffset && canBeLoaded == true ){
	  $.ajax({
		url : misha_loadmore_params.ajaxurl,
		data:data,
		type:'POST',
		beforeSend: function( xhr ){

		  canBeLoaded = false; 
		},
		success:function(data){
		  if( data ) {
			$('.category_hor_style').after( data ); // where to insert posts
			canBeLoaded = true; 
			misha_loadmore_params.current_page++;
		  }
		}
	  });
	}
  });
});

Обработчик php:

function misha_my_load_more_scripts() {

  global $wp_query; 

  wp_register_script('my_loadmore', get_stylesheet_directory_uri() . '/myloadmore.js', array('jquery') );

  wp_localize_script( 'my_loadmore', 'misha_loadmore_params', array(
	'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php', // WordPress AJAX
	'posts' => json_encode( $wp_query->query_vars ), // everything about your loop is here
	'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,
	'max_page' => $wp_query->max_num_pages
  ) );

	wp_enqueue_script( 'my_loadmore' );
}

add_action( 'wp_enqueue_scripts', 'misha_my_load_more_scripts' );

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';
	$arg ['showposts'] = 16;

  query_posts( $args );

  if( have_posts() ) :

	while( have_posts() ): the_post(); 
  // тут моя верстка блоков 

	endwhile;

  endif;
  die; 
}

add_action('wp_ajax_loadmore', 'misha_loadmore_ajax_handler'); // wp_ajax_{action}
add_action('wp_ajax_nopriv_loadmore', 'misha_loadmore_ajax_handler'); // wp_ajax_nopriv_{action}
0
Рустик
12 дней назад
  • 0
    Glum160

    Нет ограничения, запрос зациклился

    Рустик 12 дней назад

    А как поставить ограничение ?

    Комментировать
  • 0
    el-lable205 cайт: el-lable.ru
    jQuery(function($){
      var bottomOffset = 1500; 
    
      $('html, body').scroll(function(){
    	if($('body').hasClass('updating')) return false;
    	var data = {
    		'action': 'loadmore',
    		'query': misha_loadmore_params.posts,
    		'page' : misha_loadmore_params.current_page
    	};
    	if( $(document).scrollTop() > bottomOffset ){
    		$('body').addClass('updating');
    		$.ajax({
    			url : misha_loadmore_params.ajaxurl,
    			data:data,
    			type:'POST',
    			success:function(data){
    			  if( data ) {
    				$('.category_hor_style').after( data ); // where to insert posts
    				misha_loadmore_params.current_page++;
    			  }
    			  $('body').removeClass('updating');
    			}
    		});
    		}
      });
    });
    Рустик 11 дней назад

    Это не помогло, не думаю что тут дело в jquery

    function misha_loadmore_ajax_handler(){
    
    	// prepare our arguments for the query
    	$args = json_decode(stripslashes($_POST['query']), true);
    	$args['paged'] = $_POST['page'] +1; // we need next page to be loaded
    	$args['post_status'] = 'publish';
    	$args ['post_per_page'] = 8;
    
    	// it is always better to use WP_Query but not here
    	query_posts($args );
    
    	if( have_posts() ) :

    мне кажется что я тут что то делаю не так

    Glum 10 дней назад

    ну как минимум я бы добавил пересчет отступа от конца страницы потому что страница по высоте изменяется а отступ не изменяется... изза этого посты сразу все вываливаются. Ну а дальше если проблема не исчезнет а это скорее всего именно так, никто вам не поможет не видя весь код, потому что это гадание на кофейной гуще...

    jQuery(function($){
    	let canBeLoaded = true;
    
    	$(window).scroll(function(){
    		let data = {
    			'action': 'loadmore',
    			'query': misha_loadmore_params.posts,
    			'page' : misha_loadmore_params.current_page
    		},
    			bottomOffset = $( 'html' ).height() - 600; //600 нужно заменить на значение подходящее для вас
    
    		if( $(document).scrollTop() > bottomOffset && canBeLoaded == true ){
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация