В WooCommerce можно сделать фильтр поиск по атрибутам и мета-полям товаров, как на рисунке:
Начнем с html формы поиска:
<form role="search" method="get" class="woocommerce-product-search"
action="<?php echo esc_url(home_url('/')); ?>">
<input style="display: none;" type="search"
id="woocommerce-product-search-field-<?php echo isset($index) ? absint($index) : 0; ?>"
class="search-field"
placeholder="<?php echo esc_attr__('Search products…', 'woocommerce'); ?>" value=""
name="s"/>
<div class="s-fast-search__h">
Быстрый поиск
</div>
<div class="row s-fast-search__row justify-content-center">
<div class="col-lg-3 col-md-6">
<?php
$city = wp_dropdown_categories("taxonomy=pa_gorod&echo=0&show_option_none=Все города&name=gorod");
?>
<label>Выберите город</label>
<?= $city; ?>
</div>
<div class="col-lg-3 col-md-6">
<?php
$transport = wp_dropdown_categories("taxonomy=pa_peredvizhenie&echo=0&show_option_none=Все&name=peredvizhenie");
?>
<label>Передвижение</label>
<?= $transport; ?>
</div>
<div class="col-lg-3 col-md-6">
<?php
$vid_puteshestvija = wp_dropdown_categories("taxonomy=pa_vid-puteshestvija&echo=0&show_option_none=Все виды&name=vid-puteshestvija");
?>
<label>Вид путешествия</label>
<?= $vid_puteshestvija; ?>
</div>
<div class="col-lg-3 col-md-6">
<label>Дата</label>
<input type="text" name="put-date" class="s-fast-search__date">
</div>
</div>
<!--row-->
<button type="submit" class="s-fast-search__btn b-btn-bg-mc2"
value="<?php echo esc_attr_x('Search', 'submit button', 'woocommerce'); ?>">Искать
</button>
<input type="hidden" name="post_type" value="product"/>
</form>
Затем нужно отфильтровать товары, согласно данным, полученным из этой формы. Воспользуемся хуком pre_get_post, и если осуществляется поиск, изменим запрос wp_query:
add_action('pre_get_posts', 'search_by_cat');
function search_by_cat() {
global $wp_query;
if (is_search()) {
$gorod = intval($_GET['gorod']);
if($gorod>0){
$wp_query->query_vars['tax_query'][] = array( //для атрибутов товаров
"taxonomy" => "pa_gorod",
"field" => "id",
"terms" => $gorod
);
}
$tip = intval($_GET['peredvizhenie']);
if($tip>0){
$wp_query->query_vars['tax_query'][] = array(
"taxonomy" => "pa_peredvizhenie",
"field" => "id",
"terms" => $tip
);
}
$vid = intval($_GET['vid-puteshestvija']);
if($vid>0){
$wp_query->query_vars['tax_query'][] = array(
"taxonomy" => "pa_vid-puteshestvija",
"field" => "id",
"terms" => $vid
);
}
$date = $_GET['put-date'];
if($date){
$wp_query->query_vars['meta_key'] = 'nearest_date'; // для мета-полей товаров
$wp_query->query_vars['meta_value'] = strtotime($date);
}
}
}
Обновлено: 10.11.2018
Вам помогла эта статья? Оцените!
А есть плагин готовый????
Хороший гайд, но было бы не плохо побольше комментов в коде, чтобы новички могли понимать что и от чего зависит) А то просто вы выкинули исходник и все, адаптируйте дальше как хотите 😀