Intereting Posts
Изменения темы ребенка не отражают в родительской теме Обновление URL-адресов совместного использования eXtended для перетаскивания? Изменить атрибуты изображения на лету? Как вычислить общее количество значений настраиваемых полей в пользовательских типах сообщений? Остановить истечение срока действия WordPress Пустое теги заголовка Остановить автоматическое форматирование в коротких кодах Проблемы с переименованием изображений во время загрузки Соотношение таможенных таксономий отображать пользовательские таксономии, ограниченные пользовательским типом сообщения? Отфильтровать список пользователей, что meta_value пуст Как выполнить запрос в WordPress, который показывает алфавитные сообщения? Ссылка для категорий портфеля Распаковка двух столбцов для панели инструментов WordPress Как изменить категорию в URL-адресе для сообщений в нескольких категориях?

Простой способ обработки результатов поиска перед отображением

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

Мой план состоял в том, чтобы включить различные скрытые поля на разные родительские страницы, содержащие идентификатор этой конкретной страницы. В search.php я тогда хотел обработать результаты и отфильтровать страницы и сообщения, которые не имеют отношения к родительской странице.

Есть ли простой способ добиться этого?

Заранее спасибо.

ИЗМЕНИТЬ 1


Это мой search.php

 <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> в <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> К <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> 

И searchform.php :

 <form role="search" method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <label>Search...</label> <input type="text" name="s" id="s" value="<?php echo get_search_query(); ?>" placeholder="Search..." /> <input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>" /> <button type="submit"><i class="fa fa-search" aria-hidden="true"></i></button> </form> 

EDIT 2

Я также добавил <?php wp_reset_query(); ?> <?php wp_reset_query(); ?> перед if(have_posts()){} . Это не приводит к изменениям. Страницы все еще отображаются.

Solutions Collecting From Web of "Простой способ обработки результатов поиска перед отображением"

Вы можете использовать фильтр pre_get_posts чтобы отфильтровать то, что вам нужно. Вот пример того, как это сделать в Codex:

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Exclude_Pages_from_Search_Results

 function search_filter($query) { if ( !is_admin() && $query->is_main_query() ) { if ($query->is_search) { $query->set('post_type', 'post'); } } } add_action('pre_get_posts','search_filter'); 

Кроме того, эта статья может помочь вам в редактировании формы поиска …

Пока фильтр pre_get_posts позволит вам изменить основной запрос до его возникновения, добавив дополнительные требования, в этом случае это не обязательно! Вы можете сделать все с URL-адресом и формой поиска

Во-первых, переменные запроса, переданные в WP_Query могут использоваться в URL-адресе. post_parent – это запрос var, который вы хотите.

Поэтому, если у нас есть это:

 <form action="/" method="get"> <input type="text" name="s" /> <input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>"/> <input type="hidden" name="post_type" value="page"/> </form> 

Тогда любые результаты поиска будут ограничены теми, чья post_parent является страницей, с которой пришел поиск. Вы увидите URL-адреса, такие как /?s=test&post_parent=123 .

Этот трюк можно использовать для фильтрации по категориям и авторам, например, поиск категории:

/category/example/?s=test

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

/2016/?author=123