#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. Извините за задержку. Я смог заставить его работать — спасибо! Как ни странно, в одной версии моего сайта было что — то, что вызывало проблему-когда я попробовал ваш код в среде разработки, он отлично работал.