Если кто-то столкнется с подобным прикладываю код решения конкретной проблемы
function posts_filters(){
$args = array(
'post_type' => 'news-stocks',
'category_name' => '',
'publish' => true,
'orderby' => 'date',
'order' => 'DESC',
);
if( isset( $_POST['filter'] ) )
$args = array(
'post_type' => 'news-stocks',
'category_name' => $_POST['filter'],
'publish' => true,
'orderby' => 'date',
'order' => 'DESC',
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
get_template_part( 'template-parts/template', 'news' );
endwhile;
wp_reset_postdata();
else :
echo 'Записей не найдено';
endif;
die();
}
add_action('wp_ajax_myfilter', 'posts_filters');
add_action('wp_ajax_nopriv_myfilter', 'posts_filters');
<form action="<?php echo admin_url('admin-ajax.php')?>" method="POST" id="filter">
<input type="radio" id="all" value="" name="filter" checked>
<label for="all"></label>
<span>Все</span>
<input type="radio" id="stocks" value="stocks" name="filter">
<label for="stocks"></label>
<span>Акции</span>
<input type="radio" id="news" value="news" name="filter">
<label for="news"></label>
<span>Новости</span>
<button>Применить фильтр</button>
<input type="hidden" name="action" value="myfilter">
</form>
jQuery(function ($) {
$('#filter').submit(function () {
var filter = $('#filter');
$.ajax({
url: filter.attr('action'), // обработчик
data: filter.serialize(), // данные
type: filter.attr('method'), // тип запроса
beforeSend: function (xhr) {
filter.find('button').text('Загружаю...'); // изменяем текст кнопки
console.log('wait...');
},
success: function (data) {
filter.find('button').text('Применить фильтр'); // возвращает текст кнопки
$('.grid').html(data);
console.log('ok');
}
});
return false;
});