Есть рабочий код решения вопроса, вот от сюда
Как сделать ajax фильтрацию по произвольному полю флажок?, в качестве выбора там использован список тег
<li>
, как сделать чтобы выбор категорий происходил из выпадающего списка. Сам список вывожу вот таким способом:
<div class="category-filter">
<form id="ajax-filter">
<?php
$categories = get_terms( // you can use get_categories() function as well
array(
// you can replace the taxonomy parameter value with any custom taxonomy name or 'post_tag'
'taxonomy' => 'category',
'orderby' => 'name',
)
);
if( $categories ) :
?>
<select>
<option data-cat="0" value="">Select category...</option>
<?php
foreach ( $categories as $category ) :
?><option data-cat="' . $category->term_id . '" value="<?php echo $category->term_id ?>"><?php echo $category->name ?></option><?php
endforeach;
?>
</select>
<?php
endif;
?>
</form>
</div>
В файле
functions.php
темы размещен следующий код:
function enqueue_ajax_filter() {
wp_enqueue_script('ajax-filter', get_stylesheet_directory_uri() . '/ajax-filter.js', array('jquery'), '1.0', true);
wp_localize_script('ajax-filter', 'myAjax', array(
'url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('filter_nonce')
));
}
add_action('wp_enqueue_scripts', 'enqueue_ajax_filter');
function filter_posts_by_category() {
check_ajax_referer('filter_nonce', 'nonce');
$cat_id = isset($_POST['cat_id']) ? intval($_POST['cat_id']) : 0;
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
);
if ($cat_id > 0) {
$args['cat'] = $cat_id;
}
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
if ( $yaatra_mag_archive_layout == 'classic-grid' ) {
if ( $post_count == 1 ) {
echo '<div class="archive-grid-post-wrapper">';
} elseif ( $post_count == 5 ) {
echo '<div class="archive-classic-post-wrapper">';
}
}
/*
* Include the Post-Type-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Type name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_type() );
if ( $yaatra_mag_archive_layout == 'classic-grid' ) {
if ( $post_count == 4 || $post_count == 5 || $post_count == $total_post_count ) {
echo '</div>';
}
if ( $post_count == 5 ) { $post_count = 0; }
$post_count++;
}
endwhile;
wp_reset_postdata();
else :
echo '<p>Записи не найдены.</p>';
endif;
wp_die();
}
add_action('wp_ajax_filter_posts_by_category', 'filter_posts_by_category');
add_action('wp_ajax_nopriv_filter_posts_by_category', 'filter_posts_by_category');
Не могу к нему правильно сделать JS в файле
ajax-filter.js
. Может кто подскажет решение?