Intereting Posts
О почтовом формате Как установить максимально допустимый размер сообщения и количество отправленных сообщений? Наклонение (помеченного) сообщения в начало архивов Как использовать функцию add_query_arg в теге шаблона, таком как previous_post_link? Кажется, не получается s работать Ползунок Fullwidth с использованием фонового изображения Flexslider WordPress перевести кнопку «загрузить больше» Создание пользовательских страниц на основе категорий и авторов Как показать последнюю страницу вместо публикации? Получить общее количество комментариев от сообщений в конкретной пользовательской таксономии Импорт данных для плагина дополнительных настраиваемых полей? Как изменить содержимое страницы <h2> в панели администратора? Как получить записи из базы данных WordPress Отрегулируйте плагин Easy Video Player с помощью FlexSlider Включить одно пользовательское поле в результаты поиска

Поисковые запросы не работают?

У меня проблема с поисковыми запросами. Каждый раз, когда вы добавляете дополнительные запросы, например:

mywebsite.com/?s=wordpress&post_type=page

mywebsite.com/?s=wordpress&post_type=page,post

mywebsite.net/?s=wordpress&cat=1

mywebsite.net/?s=wordpress&post_type=post&tag=genesis-post

mywebsite.net/?s=wordpress&post_type=post&tag=thesis-post

он должен выполнять поиск в определенной области (тип сообщения, категория, тег).

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

В моих типах сообщений у меня есть query_var установленный в true поэтому в теории он должен работать.

Цикл search.php выглядит так:

 <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?> <div class="post"> <?php if ( 'post' == get_post_type() ) : ?> <p class="category"><?php the_category(' '); ?></p> <?php else : ?> <p class="category">Resource</p> <?php endif; ?> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <?php the_excerpt(); ?> </div><!-- /post --> <?php endwhile; ?> 

Использование скрытого ввода в моем searchform.php тоже не работает,

 <form method="get" id="searchform" action="<?php bloginfo('url'); ?>" class="search"> <input type="text" class="field" name="s" id="s" /> <input type="submit" class="submit" name="submit" value="Go" /> <input type="hidden" name="post_type" value="myposttype" /> </form> 

он по-прежнему ищет обычные сообщения, а не только внутри myposttype CPT.

Любая идея, почему поисковые запросы не будут работать? Любая помощь оценивается.

Solutions Collecting From Web of "Поисковые запросы не работают?"

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

То, что вы можете сделать для создания сложных поисковых запросов, это hook pre_get_posts и немного манипулировать запросами.

Для простого примера сначала добавьте свой собственный запрос var, чтобы перейти к массиву известных страниц запроса WordPress:

 function wpa53029_query_vars( $query_vars ){ $query_vars[] = 'my_type'; return $query_vars; } add_filter( 'query_vars', 'wpa53029_query_vars' ); 

Затем настройте форму, чтобы передать тип сообщения, например:

mywebsite.com/?s=wordpress&my_type=page

mywebsite.com/?s=wordpress&my_type=page,mycustomtype

Затем добавьте некоторый код для перехвата запроса var перед запросом базы данных и установите тип сообщения:

 function wpa53029_pre_get_posts( $query ){ if( isset( $query->query_vars['my_type'] ) ){ $types = explode( ',', $query->query_vars['my_type'] ); $query->set( 'post_type', $types ); } return $query; } add_action( 'pre_get_posts', 'wpa53029_pre_get_posts' ); 

Для отладки распечатайте содержимое объекта запроса в вашем шаблоне search.php чтобы узнать, как все будет установлено, и фактический SQL-запрос WordPress генерирует запрос к базе данных. WordPress использует $wp_query как глобальную переменную, которая содержит основной запрос:

 <pre> <?php print_r( $wp_query ); ?> </pre> 

Я не тестировал это, поэтому он может работать не так, как я думаю, но попробую:

 $post_type = $_GET['post_type']; global $query_string query_posts( $query_string . '&post_type=' . $post_type ); // loop here