@Oblom4ik

Как перевести фильтр записей WordPress на AJAX?

Всем доброго времени суток.
Допустим, что я собрал фильтр для wordpress записей.
Большая его часть отсюда: dontforget.pro/wordpress/filtr-postov-po-proizvoln...
Теперь я хочу, чтобы этот фильтр работал на AJAX, а единственная похожая статья нашлась тут: https://misha.blog/wordpress/filtryi-zapisey-i-tov...

Значит сейчас я имею код формы:
<form class="filter" action="/wp-admin/admin-ajax.php" method="get">
<span><label>Цена от: <!-- Интервал значений цены -->
		<input type="number" name="price_ot">
	</label>
	<label>до: 
		<input type="number" name="price_do">
	</label></span>
	<label>    
	<select name="sort" onchange="this.form.submit()">
<option value=""> </option>	    
<option value="ASC">По цене (сначала дешевые)</option>
<option value="DESC">По цене (сначала дорогие)</option>
</select>	
<button type="submit">Отфильтровать</button>
</form>

Перед выводимым кодом для применения фильтра размещаю вот эту бяку:
<?php if ($_GET && !empty($_GET)) {
my_filter();
} ?>


Чтобы бяка работала, в functions.php размещаю код:
function my_filter() {
$args = array();
$args[‘meta_query’] = array(‘relation’ => ‘AND’);
global $wp_query;
if ($_GET[‘price_ot’] != » || $_GET[‘price_do’] != ») {
if ($_GET[‘price_ot’] == ») $_GET[‘price_ot’] = 0;
if ($_GET[‘price_do’] == ») $_GET[‘price_do’] = 9999999;
$args[‘meta_query’][] = array(
‘key’ => ‘price’,
‘value’ => array( (int)$_GET[‘price_ot’], (int)$_GET[‘price_do’] ),
‘type’ => ‘numeric’,
‘compare’ => ‘BETWEEN’
);
}

if ($_GET[‘sort’] != ») {
$args = array(
‘meta_key’ => ‘price’,
‘orderby’ => ‘meta_value_num’,
‘order’ => $_GET[‘sort’]
);
}
query_posts(array_merge($args,$wp_query->query));
die();
}
add_action('wp_ajax_myfilter', 'my_filter'); 
add_action('wp_ajax_nopriv_myfilter', 'my_filter');


Вопрос, что сделать с пунктом 2, где у Миши описывается jQuery-скрипт?
Добавить его в myfilter.js?

И могли бы вы помочь мне исправить его скрипт под мой код?
jQuery(function($){
	$('.filter').submit(function(){
		var filter = $(this);
		$.ajax({
			url:ajaxurl,
			data:filter.serialize(),
			type:filter.attr('method'),
			beforeSend:function(xhr){
				filter.find('button').text('Отфильтровать');
			},
			success:function(data){
				filter.find('button').text('Отфильтровать');
				$('#response').html(data);
			}
		});
		return false;
	});
});


Теперь, при попытке применить фильтр меня редиректит на /wp-admin/admin-ajax.php
Такую же проблему описывает человек у него в комментариях, но там ему советуют добавить в скрипт return false;
Сам я хз куда надо добавить, но в скрипте return false; уже есть, так что я предполагаю, что он уже сам добавил.
Что делать дальше, ребят?
  • Вопрос задан
  • 2088 просмотров
Пригласить эксперта
Ответы на вопрос 1
artikus
@artikus
Разработчик на WP и WC wpruse.ru
Вам бы документацию почитать. Вот например Там же и видео есть
Если кратко, то алгоритм такой
1. Сначала подрубаем wp_localize_script() с нужными данными. Достаточно передать ссылку и нонс
2. Пишем функцию по получению и отправке данных и вешаем ее а хук wp_ajax_
3. Ловим по клику или переключению данные из формы и отправляем их аяксом. При положительном ответе выводим полученный результат
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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