Как создать пользовательский поиск для настраиваемого типа сообщений?

У меня есть поле поиска для сообщений в блоге, но мне нужен другой тип персонализированного сообщения. Как создать эту форму поиска с другим макетом результатов поиска?

34 голоса | спросил robert 8 MaramFri, 08 Mar 2013 01:56:29 +04002013-03-08T01:56:29+04:0001 2013, 01:56:29

5 ответов


51

Вот что я пробовал и получил решение с тремя шагами. Допустим, ваш пользовательский тип сообщения «

1. Добавить код функции здесь вы можете указать archive-search.php

  function template_chooser ($ template)
{
  глобальный $ wp_query;
  $ post_type = get_query_var ('post_type');
  if ($ wp_query-> is_search & amp; & amp; $ post_type == 'products')
  {
    return locate_template ('archive-search.php'); //перенаправлять в архив-search.php
  }
  return $ template;
}
add_filter ('template_include', 'template_chooser');
 

2. Создайте шаблон результатов поиска для настраиваемого типа сообщений (archive-search.php)

  & lt;? php
        /* Название шаблона: Пользовательский поиск * /
        get_header (); ? & GT;
        <div class = "contentarea">
            <div id = "content" class = "content_right">
                     <h3> Результат поиска для: <php echo "$ s"; ? & GT; & Lt; /h3 & GT;
                     & lt;? php if (has_posts ()): while (has_posts ()): the_post (); ? & GT;
                <div id = "post- <php the_ID ();> класс = "" & сообщений GT;
                     & Lt; & статья GT;
                    <h4 <a href = "<php the_permalink ();>> title = "& lt;? php the_title ();?>"> <& phis; the_title (); ? & GT; & Lt; /а & GT; & Lt; /h4 & GT;
                    <& phis; the_exerpt (); ? & GT; & Lt; /р & GT;
                    <p align = "right"> <a href = "<php the_permalink ();>>>>> Read </a> </p>
                    <span class = "post-meta"> Post By & lt;? Php the_author (); ? & GT;
                     | Дата: & lt;? Php echo date ('j F Y'); ? & GT; & Lt; /& продолжительность GT;

                    </article> & lt;! - #post ->
                & Lt; /дел & GT;
        & lt;? php endwhile; ? & GT;
    & lt;? php endif; ? & GT;




           </div> & lt;! - content ->
        </div> & lt;! - contentarea ->
        & lt;? php get_sidebar (); ? & GT;
        & lt;? php get_footer (); ? & GT;
 
  1. Строить форму поиска
    В этой форме поиска значение «продукты» скрыто и оно будет искать только сообщения product .

      <div>
        <h3> Поиск продуктов </h3>
        <form role = "search" action = "& lt;? php echo site_url ('/');>" & quot; method = "get" id = "searchform">
        <input type = "text" name = "s" placeholder = "Поиск продуктов" /& gt;
        <input type = "hidden" name = "post_type" value = "products" /& gt; & lt;! - //hidden 'products' value ->
        <input type = "submit" alt = "Search" value = "Search" /& gt;
      & Lt; /форма & GT;
     & Lt; /дел & GT;
     

для большего, я хотел бы связать вас здесь
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom -post-типа /

ответил Ronald 8 MarpmFri, 08 Mar 2013 13:04:14 +04002013-03-08T13:04:14+04:0001 2013, 13:04:14
6

Вот что работает для меня. Не так чисто, но я не мог получить ни один из этих других ответов для работы.

Форма поиска для пользовательского типа сообщений:

  <form role = "search" method = "get" class = "search-form" action = "& lt;? php echo home_url ('/');>>>
    & Lt; & этикетка GT;
        <span class = "screen-reader-text"> & lt;? php echo _x ('Поиск:', 'label')?> </span>
        <input type = "search" class = "search-field" placeholder = "& lt;? php echo esc_attr_x ('Поиск â € |', 'placeholder')?>" value = "& lt;? php echo get_search_query ()?>" name = "s" title = "& lt;? php echo esc_attr_x ('Поиск:', 'label')?>" /& GT;
        <input type = "hidden" name = "post_type" value = "book" /& gt;
    & Lt; /этикетки & GT;
    <input type = "submit" class = "search-submit" value = "& lt;? php echo esc_attr_x ('Поиск', 'кнопка отправки')?>" /& GT;
& Lt; /форма & GT;
 

В functions.php:

  функция searchfilter ($ query) {
    if ($ query-> is_search & amp;! is_admin ()) {
        if (isset ($ _ GET ['post_type'])) {
            $ type = $ _GET ['post_type'];
                if ($ type == 'book') {
                    $ Query- & GT; множество ( 'post_type', массив ( 'книга'));
                }
        }
    }
return $ query;
}
add_filter ( 'pre_get_posts', 'searchfilter');
 

В search.php:

  & lt;? php if (has_posts ()):?>
& lt;? php while (has_posts ()): the_post (); ? & GT;
    & lt;? php if (isset ($ _ GET ['post_type'])) {
        $ type = $ _GET ['post_type'];
           if ($ type == 'book') {?>

               /* Формат для персонализированного типа «книги» * /

           & lt;? php} else {?>

               /* Формат для пользовательских типов сообщений, которые не являются «книгами»,
               или вы можете использовать elseif для указания второго типа сообщения
               так же, как указано выше. Скопируйте формат по умолчанию здесь, если вы
               только один пользовательский тип сообщения. * /

           & lt;? php}?>
    & lt;? php} else {?>

              /* Формат для отображения, когда параметр post_type
              (т. е. формат по умолчанию) * /
& lt;? php}?>
& lt;? php endwhile; else:?>

/* Что показывать, если результатов нет. * /

& lt;? php endif; ? & GT;
 

Естественно, во всех трех местах вам нужно будет заменить «книгу» своим пользовательским типом сообщения.

Надеюсь, это поможет кому-то!

ответил Shoelaced 13 Jam1000000amWed, 13 Jan 2016 00:46:15 +030016 2016, 00:46:15
2

Короткий код более актуализирован

  function template_chooser ($ template)
{
  глобальный $ wp_query;
  $ post_type = $ wp_query-> query_vars ["pagename"];
  if (isset ($ _ GET ['s']) & amp; & amp; $ post_type == 'products')
  {

    return locate_template ('archive-search.php'); //перенаправлять в архив-search.php
  }
  return $ template;
}
add_filter ('template_include', 'template_chooser');
 
ответил Raylin Aquino Fernández 16 12015vEurope/Moscow11bEurope/MoscowMon, 16 Nov 2015 07:18:12 +0300 2015, 07:18:12
2

Я искал использование двух разных форм для обычных обысков и моих поисков в настраиваемом типе сообщений.

Мой пользовательский тип сообщения использует другой заголовок, чем обычные страницы, на моей обычной странице вызов в мою форму поиска:

  & lt;? php get_search_form ('true'); ? & GT;
 

И вызов моей формы поиска в заголовке настраиваемого сообщения:

  & lt;? php get_template_part ('поиск', 'library'); ? & GT;
 

У которого есть дополнительное поле:

  <input type = "hidden" name = "post_type" value = "library" /& gt; //Где «library» - мой пользовательский тип сообщения.
 

В файле функций у меня есть следующий код, который вы предоставили.

  /**
 * Пользовательский поиск библиотеки
* /
функция search_library (шаблон $)
{
  глобальный $ wp_query;
  $ post_type = get_query_var ('post_type');
  if ($ wp_query-> is_search & amp; & amp; $ post_type == 'library')
  {
    return locate_template ('search-library.php'); //перенаправлять в архив-search.php
  }
  return $ template;
}
add_filter ('template_include', 'search_library');
 

Определяет, будет ли поисковая форма выполнять поиск в пользовательских полях, таким образом показывая поиск в пользовательском шаблоне, иначе используйте обычный шаблон.

ответил Fliberty 2 MaramThu, 02 Mar 2017 10:20:17 +03002017-03-02T10:20:17+03:0010 2017, 10:20:17
1

Чтобы устранить проблему с пустым входным поиском, вы можете заменить код функции следующим образом:

  function template_chooser ($ template)
{
 глобальный $ wp_query;
 $ post_type = get_query_var ('post_type');
 if (isset ($ _ GET ['s']) & amp; & amp; $ post_type == 'products')
 {
  return locate_template ('archive-search.php'); //перенаправлять в архив-search.php
 }
 return $ template;
}
add_filter ('template_include', 'template_chooser');
 
ответил ciccioformaggio 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 16 Sep 2014 14:33:32 +0400 2014, 14:33:32

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132