WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Ajax в поиске вместо пагинации

Стоит у меня форма поиска:

<div class="search-position">
	<form method="get" action="/" id="search-block-form" class="search_icon">
	<div class="form-item">
	<input autocomplete="off" class="search-field" type="text" name="s" placeholder="Поиск по сайту" size="15" maxlength="128">
	</div>
	</form>
	<ul class="codyshop-ajax-search"></ul>
</div>

Скрипт

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

В functions.php

function true_load_posts4(){

$args4 = json_decode( stripslashes( $_POST['query'] ), true );
	$args4['post_type'] = array('post');
	$args4['paged'] = $_POST['page'] + 1;

	// обычно лучше использовать WP_Query, но не здесь
	query_posts( $args4 );
	// если посты есть
	if( have_posts() ) :

		// запускаем цикл
		while( have_posts() ): the_post();

			include(TEMPLATEPATH. '/includes/home_search.php');

		endwhile;
 wp_reset_postdata();
	endif;
	die();
}

add_action('wp_ajax_loadmore4', 'true_load_posts4');
add_action('wp_ajax_nopriv_loadmore4', 'true_load_posts4');

Ну и в файле темы search.php вывод новостей такого типа

    rewind_posts();
			if (have_posts()) {

				while (have_posts()) : the_post();
					include(TEMPLATEPATH. '/includes/home_search.php');
				endwhile;

			} else {
				include(TEMPLATEPATH. '/includes/not-found/not-found-search.php');
			}
			 wp_reset_postdata();

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

Все это добро отсюда https://misha.agency/wordpress/ajax-pagination.html

Часть решений отсюда https://wp-kama.ru/question/vydacha-postov-po-poiskovomu-zaprosu-s-uchyotom-ajax-podgruzki-postov

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

Заметки к вопросу:
igor_1 3.2 года назад

Вот скрипт который заработал ) Блин невнимательность она такая

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

    В функцию-обработчик не передаётся содержимое поисковой строки.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация