Пользовательская страница поиска Wordpress для пользовательского типа сообщений

У меня есть пользовательский тип сообщения recipes, который отображает постраничный список рецептов на сайте с использованием шаблона archive-recipes.php.

Мне нужно иметь возможность искать эти рецепты, используя форму поиска в верхней части страницы:

<form role="search" method="get" class="searchbox" action="/recipes/">
    <input type="text" class="textbox strong" name="s" id="s" value="" placeholder="Search..." />
    <input type="hidden" name="post_type" value="recipes" />                     
    <button type="submit" class="button icon"></button>
</form>

Можно ли вернуться на эту страницу списка рецептов после выполнения поиска и отобразить результаты в том же стиле, что и списки?

Кажется, я не могу найти ничего, что позволило бы мне создать пользовательскую страницу поиска для пользовательских типов сообщений.

Спасибо за вашу помощь.


person dclawson    schedule 12.11.2012    source источник


Ответы (1)


Вы можете использовать фильтр «template_include».

например в вашем файле функций.

function template_chooser($template)
{
  global $wp_query;
  $post_type = get_query_var('post_type');
  if( $wp_query->is_search && $post_type == 'recipes' )
  {
    return locate_template('archive-recipes.php');
  }
  return $template;
}
add_filter('template_include', 'template_chooser');

Это должно проверять поиск по пользовательскому типу сообщений «рецепты» и использовать шаблон страницы архива для результатов.

person Tom    schedule 12.11.2012
comment
Спасибо @noisymask. Похоже, это должно работать так, как мне нужно, однако при отладке $wp_query я заметил, что запрос sql содержит поиск по всем типам сообщений, а не только по «рецептам». Есть идеи? - person dclawson; 13.11.2012
comment
nvm, инфраструктура WP Roots, которую я использую, испортила перезапись. еще раз спасибо. - person dclawson; 13.11.2012
comment
Приведенное выше решение работает хорошо; однако я обнаружил, что get_query_var('post_type') возвращает массив всех зарегистрированных типов сообщений. Вместо этого я бы использовал $post_type = get_post_type();. Кроме того, чтобы сохранить некоторую условную проверку для нескольких типов сообщений: return locate_template('archive-' . $post_type . '.php'); - person indextwo; 17.04.2014