Задача. Сделать поиск товаров в WooCommerce по категориям. В поле поиска должен присутствовать выпадающий список из которого можно выбрать категорию в которой необходимо произвести поиск товара или выбрать поиск по всем категориям, как на Изображении №1.
Решение 1. В файле product-searchform.php
нужно заменить форму поиска формой из кода №1 и добавить стилистическое оформление для поля поиска в файл стилей из кода №2 или свой.
Алгоритм добавления поиска по категориям:
- Если еще не скопирован, копируем файл формы поиска из папки плагина
/site.ru/wp-content/plugins/woocommerce/templates/product-searchform.php
в папку с темой/ваша_тема/woocommerce/product-searchform.php
(для сохранения настроек при обновлении плагина). - Заменить форму поиска формой из
кода №1
. - Добавить стили из
кода №2
(или свои) в файл стилейstyle.css
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<form method=“get” id=“searchform” class=“searchform” action=“<?php echo esc_url( home_url( ‘/’ ) ); ?>“ role=“search”>
<?php if (class_exists(‘WooCommerce’)) : ?>
<?php
if(isset($_REQUEST[‘product_cat’]) && !empty($_REQUEST[‘product_cat’])) {
$optsetlect=$_REQUEST[‘product_cat’];
} else {
$optsetlect=0;
}
$args = array(
‘show_option_all’ => esc_html__( ‘Все категории’, ‘woocommerce’ ),
‘hierarchical’ => 1,
‘depth’ => 2,
‘class’ => ‘cat’,
‘echo’ => 1,
‘value_field’ => ‘slug’,
‘selected’ => $optsetlect
);
$args[‘taxonomy’] = ‘product_cat’;
$args[‘name’] = ‘product_cat’;
$args[‘class’] = ‘cate-dropdown hidden-xs’;
wp_dropdown_categories($args);
?>
<input type=“hidden” value=“product” name=“post_type”>
<?php endif; ?>
<input type=“text” name=“s” class=“” id=“s2” value=“<?php echo get_search_query(); ?>“ placeholder=“Поиск по товарам..” />
<button type=“submit” class=“pic-sea” value=“”><i class=“fa fa-search”></i></button>
</form>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#searchform select {
border: none;
border-right: 1px solid #eee;
background: none;
position: absolute;
right: 0;
top: 12px;
border-left: 1px solid #787878;
}
#searchform input {float: left; width: 100%;}
#searchform .pic-sea {
padding: 8px 35px;
border-radius: 0px 2px 2px 0px;
border: none;
float: left;
width: 10%;
background-color: #111;
transition: background-color .3s ease;
-webkit-transition: background-color 0.3s ease 0s;
color: #fff;
z-index: 76;
cursor: pointer;
}
#searchform .pic-sea .fa {color: #fff !important; margin: 0 !important;}
#searchform .pic-sea:hover {background-color: #000;}
|
Решение 2. Аналогичное решение первому. Изменяем файл формы поиска и через хук в functions.php
изменяем вывод товаров в зависимости от категории. Можно и не через файл формы поиска, а, например, вывести отдельным файлом, добавив на сайт через шорткод.
Алгоритм второго варианта добавления поиска по категориям:
- Заменить форму поиска формой из
кода №3
в/ваша_тема/woocommerce/product-searchform.php
. - Изменить вывод товаров в зависимости от выбранной категории через хук
pre_get_posts
. Вставляемкод №3
в файлfunctions.php
.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php $dropdowncats = wp_dropdown_categories(
‘hide_empty=0&depth=1&selected=’.$_GET[‘cat’].‘&hierarchical=1&echo=0&taxonomy=product_cat&show_option_none=Все категории’
); ?>
<form id=“searchform” role=“search” class=“search” method=“get” action=“<?php echo home_url( ‘/’ ); ?>“ >
<input name=“s” id=“s” type=“text” value=“<?php echo get_search_query(); ?>“ placeholder=“введите запрос…”/>
<input type=“hidden” name=“post_type” value=“product” />
<?php echo $dropdowncats; ?>
<input type=“submit” class=“submit” name=“submit” id=“searchsubmit” value=“Найти” />
</form>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// Изменяем вывод товаров в зависимости от выбранной категории
add_action(‘pre_get_posts’, ‘search_by_cat’);
function search_by_cat() {
global $wp_query;
if (is_search()) {
$cat = intval($_GET[‘cat’]);
if($cat<0){
$wp_query–>query_vars[‘product_cat’] = ”;
}else{
$term = get_term_by(‘id’,$cat,‘product_cat’);
$wp_query–>query_vars[‘cat’] = ”;
$wp_query–>query_vars[‘product_cat’] = $term–>slug;
}
}
}
|
taxonomy=product_cat&
кода №3 product_cat на category, то вместо категорий товаров будут рубрики постов.'hide_empty=0&depth=1&selected='
depth=1 — это параметр вложенности категорий, т.е. при 1 в выпадающий список не попадают подкатегории. Если нужны и подкатегории нужно указать depth=2.post_type=product
. Т.е. при использовании обоих кодов url после поиска будет примерно такой site.ru/?s=word_request&post_type=product&cat=63&submit=search
. Исключаем post_type=product — в инпуте Кода №3 input type="hidden" name="post_type" value="product"
убираем значения «product» и «post_type«, параметры остаются пустыми.