Про поиск я не понял
а по поводу фильтрации я делаю так
вот код формы для фильтра где например фильтриуем по атрибуту atribut1 и atribut2
<div class="catalog-filter">
<form method="POST" action="/wp-admin/admin-ajax.php" class="filter_go row">
<input type="hidden" name="action" value="myfilter"><!-- название фильтра -->
<input type="hidden" name="id" value="53"><!-- id категории откуда берутся записи -->
<div class="col">
<select class="input-control" name="atribut1">
<option value="">Фильтр</option>
<option value="Значение1">Значение1</option>
<option value="Значение2">Значение2</option>
<option value="Значение3">Значение3</option>
<option value="Значение4">Значение4</option>
<option value="Значение5">Значение5</option>
<option value="Значение6">Значение6</option>
</select>
</div>
<div class="col">
<select class="input-control" name="atribut2">
<option value="">Фильтр</option>
<option value="Значение1">Значение1</option>
<option value="Значение2">Значение2</option>
<option value="Значение3">Значение3</option>
<option value="Значение4">Значение4</option>
<option value="Значение5">Значение5</option>
<option value="Значение6">Значение6</option>
</select>
</div>
</form>
</div>
Дале через js передаем данные ajax-ом отправляем и потом принимаем и вставляем в блок с классом catalog-row
$.ajax({
url:filter.attr('action'),
data:filter.serialize(), // form data
type:filter.attr('method'), // POST
beforeSend:function(xhr){
$('.catalog-row').html('<p><b>Загрузка...</b></p>'); // insert data
},
success:function(data){
$('.catalog-row').html(data); // insert data
}
});
ну сам код который вставляем в functions.php
<?php
add_action('wp_ajax_myfilter', 'misha_filter_function'); // wp_ajax_{ACTION HERE}
add_action('wp_ajax_nopriv_myfilter', 'misha_filter_function');
function misha_filter_function(){
$atribut1 = $_POST['atribut1'];
$atribut2 = $_POST['atribut2'];
if($atribut1){
$mass[] = [
'key' => 'atribut1',
'value' => $atribut1
];
}
if($atribut2){
$mass[] = [
'key' => 'atribut2',
'value' => $atribut2
];
}
$args = array(
'orderby' => 'date', // we will sort posts by date
'order' => 'ASC', // ASC or DESC
'posts_per_page' => 999,
'meta_query' => [
'relation' => 'AND',
$mass
]
);
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['id']
)
);
// if you want to use multiple checkboxed, just duplicate the above 5 lines for each checkbox
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
$field = get_fields(); ?>
<div class="col-xl-3 col-md-6 col-sm-6">
<div class="catalog-box base-box">
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail( 'medium' ); ?></a>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
</div>
<?php endwhile;
wp_reset_postdata();
else :
echo 'Нет товаров';
endif;
die();
}
?>
Дальше таким же образом можно делать пагинацию и другие фильтры и поиск