Вопрос или проблема
Я использую 2 категории в 2 выпадающих списках. Когда я нажимаю “Отправить”, URL показывает фильтрацию, но просто загружает главную страницу. Я хочу, чтобы пользователь мог выбирать несколько категорий и отправлять их для отображения результатов.
<?php $price = array(
'show_option_all' => '',
'show_option_none' => 'Диапазон цен:',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 1,
'hide_empty' => 1,
'child_of' => 110,
'exclude' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 1,
'name' => 'price',
'id' => '',
'class' => 'styled-select',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false
); ?>
<?php $region = array(
'show_option_all' => '',
'show_option_none' => 'Регион:',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 1,
'hide_empty' => 1,
'child_of' => 32,
'exclude' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 1,
'name' => 'region',
'id' => '',
'class' => 'styled-select',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false
); ?>
<div class="search">
<form method="get" action="<?php bloginfo('siteurl'); ?>" id="category" >
<div class="four columns">
<div class="search_drop"><?php wp_dropdown_categories( $price); ?> </div>
</div>
<div class="four columns">
<div class="search_drop"><?php wp_dropdown_categories( $region); ?> </div>
</div>
<div class="four columns">
<input type="submit" name="submit" value="Фильтр" class="button" /></form>
</div>
</div>
Все три ваших выпадающих списка имеют одинаковое имя в аргументах, так что я предполагаю, что последний используется по умолчанию. Дайте каждому уникальное имя в аргументах, а затем используйте это имя для извлечения информации из $_POST
.
Ответ или решение
Для решения вашей задачи по созданию нескольких выпадающих списков с кнопкой отправки и отображением результатов фильтрации, необходимо внести несколько ключевых изменений в ваш код. В текущем варианте наблюдается проблема, связанная с использованием одинаковых имен для параметров категорий, что может приводить к некорректной передачи данных и, как следствие, к перенаправлению на домашнюю страницу без применения фильтров.
Основные шаги для решения проблемы:
-
Уникальные имена для выпадающих списков: Каждому из ваших выпадающих списков следует присвоить уникальное имя, чтобы при отправке формы данные корректно собирались и обрабатывались.
-
Обработка данных на сервере: Необходимо реализовать обработку данных, отправленных с формы, чтобы результаты отображались на нужной странице, а не возвращали пользователя на домашнюю страницу.
-
Обновление формата отправки: Убедитесь, что форма отправляется на правильный URL, который будет обрабатывать результаты фильтрации.
Исправленный код:
Ниже представлен обновленный код с учетом указанных выше рекомендаций:
<?php
$price = array(
'show_option_all' => '',
'show_option_none' => 'Цена:',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 1,
'hide_empty' => 1,
'child_of' => 110,
'exclude' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 1,
'name' => 'price_category', // Уникальное имя
'id' => '',
'class' => 'styled-select',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false
);
$region = array(
'show_option_all' => '',
'show_option_none' => 'Регион:',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 1,
'hide_empty' => 1,
'child_of' => 32,
'exclude' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 1,
'name' => 'region_category', // Уникальное имя
'id' => '',
'class' => 'styled-select',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false
);
?>
<div class="search">
<form method="get" action="<?php echo esc_url(home_url('/results')); ?>" id="category"> <!-- Измените на правильный URL -->
<div class="four columns">
<div class="search_drop"><?php wp_dropdown_categories($price); ?></div>
</div>
<div class="four columns">
<div class="search_drop"><?php wp_dropdown_categories($region); ?></div>
</div>
<div class="four columns">
<input type="submit" name="submit" value="Фильтр" class="button" />
</div>
</form>
</div>
Дополнительные шаги для обработки данных:
-
Создайте страницу результатов: Убедитесь, что у вас есть страница или обработчик, который будет обрабатывать отправленные данные формы. Например, вы можете создать шаблон
results.php
. -
Обработка данных: На этой странице вы можете использовать глобальный массив
$_GET
, чтобы получить выбранные категории и применить соответствующий фильтр к вашему контенту. Пример обработки:
<?php
$selected_price = isset($_GET['price_category']) ? intval($_GET['price_category']) : null;
$selected_region = isset($_GET['region_category']) ? intval($_GET['region_category']) : null;
// Используйте полученные значения для фильтрации контента
$query_args = array(
'post_type' => 'your_post_type',
'tax_query' => array(
'relation' => 'AND',
)
);
if ($selected_price) {
$query_args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $selected_price,
);
}
if ($selected_region) {
$query_args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $selected_region,
);
}
// Делаем запрос
$query = new WP_Query($query_args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Отображение поста
}
}
wp_reset_postdata();
?>
Заключение
Данные изменения обеспечат корректную работу ваших выпадающих списков и возможность фильтрации контента на основе выбранных категорий. Удостоверьтесь, что обработка запросов выполняется на нужной странице, что позволит избежать перенаправления на главную страницу. Таким образом, пользователи смогут эффективно использовать фильтры для поиска нужной информации.