Я бы хотел настроить виджет для фильтрации сообщений по категориям. Предположим, у меня есть две разные категории: «Страны» и «продолжительность пребывания» с подкатегориями. Вот пример того, что у меня есть:Фильтровать сообщения по нескольким категориям: wordpress
То, что я хочу, чтобы фильтровать сообщения по нескольким категориям. Итак, если пользователь проверяет страну «Лаос» и продолжительность пребывания «2-4Days», я хотел бы получить только должности, в которых была добавлена категория «Лаос» И категория «2-4Days» ,
Я попытался использовать заглушку Query Multiple Taxonomies. Тем не менее, это подключение - - получение всех сообщений категории "Лаос" и всех сообщений с длительностью пребывания "2-4Days".
Я знаю, что могу фильтровать сообщение с этим запросом, но мне нужна помощь для создания этого виджета с помощью кнопки отправки. Кроме того, я хотел бы настроить его для удаления родительских категорий и отображения их в качестве заголовка (снимите флажок «Страны» и «Длительность пребывания» и добавьте к ним определенный класс)?
Работа запроса:
<?php // cat 42=Laos cat 57=2-4Days
<?php $my_query_1 = new WP_query(array('category__and' => array(42,57))); ?>
<?php while ($my_query_1->have_posts()) : $my_query_1->the_post(); ?>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to
<?php the_title(); ?>"><?php the_title(); ?><?php the_excerpt(); ?></a>
<?php endwhile; ?>
Спасибо за помощь
Что я сделал:
- создать новую боковую панель, где я хочу, чтобы добавить новую форму
Я создаю шаблон «sidebar-filters.php» этой новой боковой панели. Вот код, который у меня внутри.
<div id="secondary" class="widget-area" role="complementary"> I'm the sidebar filters <?php $current_countries = get_query_var('countries'); $current_stays = get_query_var('stays'); $countries = get_categories('child_of=62'); $stays = get_categories('child_of=63'); ?> <form action="<?php the_permalink(); ?>" id="filterForm" method="post"> <ul> <li> <label><b>Countries</b></label> </li><br/> <?php foreach ($countries as $country) { // var_dump($country->cat_ID); // var_dump($country->name); echo sprintf('<li><input type="checkbox" name="countries[]" id="checkbox_%s" value="%s" %s',$country->name , $country->cat_ID, set_checked($current_countries, $country)); echo sprintf('/><label for="checkbox_%s">%s</label></li>',$country->name,$country->name); } ?> </ul><br/><br/> <ul> <li> <label><b>Length of stay</b></label> </li><br/> <?php foreach ($stays as $stay) { // var_dump($stay->cat_ID); // var_dump($stay->slug); echo sprintf('<li><input type="checkbox" name="stays[]" id="checkbox_%s" value="%s" %s',$stay->slug , $stay->cat_ID, set_checked($current_stays, $stay)); echo sprintf('/><label for="checkbox_%s">%s</label></li>',$stay->slug,$stay->name); } ?> </ul><br/><br/> <ul> <li> <button type="submit">Send email</button> </li> </ul> <input type="hidden" name="submitted" id="submitted" value="true" /> </form>
А вот код, который я имел в своем function.php
функции my_query_vars ($ вары) { array_push ($ вары, 'страны', 'остается'); return $ vars; } add_filter ('query_vars', 'my_query_vars');
Функция set_checked ($ arr, $ value) { $ checked = ''; если (!empty ($ arr) & & in_array ($ value, $ arr)) $ checked = 'checked'; return $ checked; }
function my_query($query)
{
// You can use is_archive() or whatever you need here
if ($query->is_main_query() && is_search()) {
$cat_and = array();
foreach (array('countries', 'stays') as $variable) {
$categories = get_query_var($variable);
if (!empty($categories)) {
$cat_and = array_merge($cat_and, $categories);
}
}
if (!empty($cat_and)) $query->set('category__and', $cat_and);
}
}
add_action('pre_get_posts', 'my_query');
But, I'm retrieving nothing for the moment, what do I am doing wrong?
Запрос, который я отправляю, работает, но я хотел бы знать, как я могу создать и обновить этот запрос в соответствии с выбранными флажками? – Romain
см. Обновленный ответ –
Спасибо за ваш ответ, но я хочу знать, как я могу создать этот виджет с кнопкой отправки? И как я могу настроить свой виджет? – Romain