Задать вопрос
@MalGym

Почему не работает Ajax подгрузка постов?

Подскажите, пытаюсь организовать подгрузку постов при клике ajax . Посты произвольные.
JS:
jQuery(function($){
	$('#true_loadmore').click(function(){
		$(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
		var data = {
			'action': 'loadmore',
			'query': true_posts,
			'page' : current_page
		};
		$.ajax({
			url:ajaxurl, // обработчик
			data:data, // данные
			type:'POST', // тип запроса
			success:function(data){
				if( data ) { 
					$('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
					current_page++; // увеличиваем номер страницы на единицу
					if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
				} else {
					$('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
				}
			}
		});
	});
});

PHP вставляю в function:
function true_load_posts(){
 
	$args = unserialize( stripslashes( $_POST['query'] ) );
	$args['paged'] = $_POST['page'] + 1; // следующая страница
	$args['post_status'] = 'publish';
        $args['post_type'] = 'event';
 
	query_posts( $args );
	// если посты есть
	if( have_posts() ) :
 
		// запускаем цикл
		while( have_posts() ): the_post();
 
			get_template_part( 'template-parts/post/content', get_post_format() );
 
		endwhile;
 
	endif;
	die();
}
 
 
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');


Это вставляю в шаблон:
<?php if (  $wp_query->max_num_pages > 1 ) : ?>
	<script>
	var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
	var true_posts = '<?php echo serialize($wp_query->query_vars); ?>';
	var current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
	var max_pages = '<?php echo $wp_query->max_num_pages; ?>';
	</script>
	<div id="true_loadmore">Загрузить ещё</div>
<?php endif; ?>


В итоге при клике ничего не подгружается.
Вот мой вывод постов:
<?php $custom_query = new WP_Query( array( 'post_type' => 'event','posts_per_page'=>'8','paged'=>$paged));
					if ($custom_query->have_posts()) : while ($custom_query->have_posts()) : $custom_query->the_post();?>

				<div class="top-event-block">
					<div class="upcoming-data"><?php echo get_the_date("M j, Y");?></div>
					<div class="upcoming-title"><?php the_title(); ?></div>
					<div class="upcoming-exp"><?php the_excerpt();?></div>
					<div class="upcoming-read-more"><a href="<?php echo the_permalink(); ?>">Read more</a></div>
				</div>

				<?php endwhile; ?>
				<?php endif; ?>
				<?php wp_reset_query(); ?>
  • Вопрос задан
  • 378 просмотров
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
Это хорошо, что Вы взялись за такое интересное дело.
Так на взгляд вроде все в порядке.
Я обычно проверяю шаги.
Для начала попробуйте хоть что то вернуть в браузер просто написав в конце функции
function true_load_posts(){
 
 echo "<div>я пришел с сервера</div>";
  die();
}

если получите, значит обмен работает. Если нет, надо сначала настроить обмен.
Далее возвращайте код обратно в функцию частями и проверяйте как выполняется каждая инструкция. Буквально каждый логический пункт. Получение списка аргументов, правка аргументов, выполнение запроса, наличие результатов запроса. Результаты можете отправлять туда-же в браузер и смотреть что получаете.
Так и доберетесь до своего проблемного участка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы