Поиск только по заданной таксономии Wordpress?

На сайте есть две кастомные таксономии: фильмы и книги. Сейчас использую стандартную форму поиска wordpress с плагином Ajax search (по типу живого поиска):
<form method="get" class="searchform" action="<?php bloginfo('url'); ?>" >
	<input type="text" class="place s" name="s" id='my-s' autocomplete="off" placeholder="Поиск" />
	<input type="image" src="search.png" class="submit-s" name="submit" value="<?php _e('Найти'); ?>" />
</form>


Я хочу сделать две формы поиска: одна ищет только по таксономии Фильмы и показывается только там, где выводятся Фильмы, другая - по таксономии Книги и показывается только там, где Книги.

Подскажите, пожалуйста:
1. Как к указанной выше форме прикрутить ограничение - искать только по заданной таксономии: taxonomy=films или taxonomy=books
2. Как в указанной выше форме сделать исключение определенной таксономии. Например, искать везде, кроме taxonomy=films
  • Вопрос задан
  • 1811 просмотров
Пригласить эксперта
Ответы на вопрос 3
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Форма, предложенная Роман Краббз только передает через скрытое поле нужный параметр. Надо еще сам запрос модифицировать:
function search_filter( $query ) {
  // Берем название таксономии из скрытого поля
  $taxonomy = sanitize_text_field( $_GET['taxonomy'] );
  // Получаем ID всех терминов в заданной таксономи
  $terms = get_terms( $taxonomy, array(
    'fields' => 'ids'
  ) );
  // Изолируем нужный запрос
  if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
      // Формируем массив параметров подзапроса по таксономии
      $tax_query = array(
        array(
          'taxonomy' => $taxonomy,
          'field' => 'id',
          'terms' => $terms,
          'operator'  => 'IN'
        ),
      );
      // Передаем параметры подзапроса в основной запрос
      $query->set( 'tax_query', $tax_query );
  }
}
add_action( 'pre_get_posts', 'search_filter' );

Если я правильно понимаю, вы хотите, чтобы введенное в поиске слово расценивалось как термин таксономии, и в результате выводились посты с этим термином в этой таксономии? Тогда в параметры в коде выше нужно передавать tax_query.
Ответ написан
Punkie
@Punkie
<form method="get" class="searchform" action="<?php bloginfo('url'); ?>" >
  <input type="text" class="place s" name="s" id='my-s' autocomplete="off" placeholder="Поиск" />
  <input type="image" src="search.png" class="submit-s" name="submit" value="<?php _e('Найти'); ?>" />
  <input type="hidden" name="taxonomy" value="films" />
</form>


Попробуйте так.
Ответ написан
@lakegull
Не знаю как вы относитесь к установке плагинов, но могу посоветовать один, который 100% решит вашу задачу.
codecanyon.net/item/filter-custom-fields-taxonomie...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы