WordPress как использовать вторую форму, которая ищет только сообщения?

#php #wordpress #forms #query-string #query-variables

Вопрос:

У меня есть две формы на моем сайте wordpress, search.blade.php и blog-search.blade.php .

search.blade.php находится в заголовке сайта и выполняет поиск по всем типам контента.

blog-search.blade.php предназначен только для поиска типов сообщений.

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

     function searchfilter($query) {
 
    if ($query->is_search amp;amp; !is_admin() ) {
        $query->set('post_type', 'post');
    }
 
return $query;
}
 
add_filter('pre_get_posts','searchfilter');
 

Понятно, что это относится как к search.blade.php И blog-search.blade.php, но я хочу, чтобы это применялось только к поиску по блогам.

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

Вот мой blog-search.blade.php код:

 <form action="{{ get_bloginfo('url') }}" method="GET" class="blog-search-form">
    <input type="search" name="s" placeholder="Search the blog...">
    <input type="hidden" name="search-type" value="normal" />
    <span class="icon-search"></span>
</form>
 

Есть ли способ, которым я мог бы реализовать что-то вроде:

  function searchfilter($query) {
 
    if ($query->is_search amp;amp; !is_admin() amp;amp; INPUT TYPE == HIDDEN ) {
        $query->set('post_type', 'post');
    }
    ...
 

Так что только поиск по блогу выполняет поиск по постам, а мой основной поиск работает как обычно? Я попытался реализовать это, но безуспешно, поэтому я думаю, что условие может помочь.

search.blade.php, на всякий случай:

 <form action="{{ get_bloginfo('url') }}" method="GET" class="search-form">
    <input type="search" name="s" placeholder="Search the site">
</form>
 

Ответ №1:

Вы можете настроить это несколькими способами. Я лично всегда использую метод ajax для запроса базы данных, но если вы хотите использовать query_vars метод, поскольку вы уже думаете об этом и предлагаете его в своем вопросе, то вы могли бы сделать что-то вроде этого:

Таким образом, это будет ваша html-форма:

 <form method="GET">
    <input type="search" name="s" placeholder="Search the blog...">
    <input type="hidden" name="onlyblog" id="onlyblog" value="yes" />
    <span class="icon-search"></span>
    <button type="submit">Search</button>
</form>
 

затем php , сбоку, ваша условная проверка будет onlyblog иметь такое значение:

 function searchfilter($query) {

$query_type = isset($_GET['onlyblog']) ? sanitize_text_field($_GET['onlyblog']) : "";
 
    if ($query->is_search amp;amp; !is_admin() amp;amp; !empty($query_type) amp;amp; 'yes' == $query_type) {
        $query->set('post_type', 'post');
    }
 
return $query;
}
 

Дайте мне знать, если вам удалось заставить его работать!

Комментарии:

1. Извините за задержку. Я смог заставить его работать — спасибо! Как ни странно, в одной версии моего сайта было что — то, что вызывало проблему-когда я попробовал ваш код в среде разработки, он отлично работал.