Intereting Posts
Поиск сообщения с использованием даты его публикации Редактирование заголовков Заголовки каждой детали в woocommerce Order Email отображать содержимое разных страниц на одной странице Пользовательский тип сообщения не отображается в панировочных сухарях на странице архива Загружать изображения с одного сервера на другой в wordpress Скрыть меню с главной страницы Как перечислить все пользовательские типы сообщений в пользовательском виджете? PHP XMLRPC для WordPress: добавление метатегов и описание Не удалось загрузить изображения в локальной установке Windows Отображение мета-поля в настраиваемом типе сообщений на странице post_parent в настраиваемом типе сообщений Как запросить ссылку на основной сайт WP Multisite Как использовать WP_Query для запуска этого запроса базы данных в качестве результата поиска? как изменить меню в подменю Custom Excerpt возвращает 52 символа, а не 52 слова

Как передать параметр поиска $ _GET на новую страницу пользовательского поиска?

Пока в моей установке wordpress у меня есть полная страница поиска WordPress, которую я могу позвонить, перейдя к:

/?s=mysearchstring

И это ищет через страницы WordPress, содержащие строку « mysearchstring ».

Поэтому я создал новую страницу «Пользовательский поиск» ( /custom-search/ ) и назначил файл шаблона custom-search.php (тот же код, что и search.php ).

Как добавить параметр ключевого слова к этому?

/custom-search?s=mysearchstring не работает, он отображает только 404 Page Not Found, в то время как /custom-search/ отображает страницу поиска как единственный результат.

custom-search.php код :

 <?php /* Template Name: Custom Search */ //Post ID global $wp_query; $content_array = $wp_query->get_queried_object(); if(isset($content_array->ID)){ $post_id = $content_array->ID; } else $post_id=0; $template_uri = get_template_directory_uri(); //Search $allsearch = &new WP_Query("s=$s&showposts=-1"); $count = $allsearch->post_count; wp_reset_query(); $hits = $count == 1 ? $count." ".__("hit for","goodweb") : $count." ".__("hits for","goodweb"); get_header(); ?> 

наряду с списком html.

Что я могу сделать, чтобы передать поисковый запрос параметра на эту страницу?

Проблема в том, что 's' param является стандартным параметром запроса WordPress, когда вы используете url /custom-search?s=mysearchstring которые вы говорите в WordPress, чтобы получить страницу 'custom-search' который содержит строку 'mysearchstring' и это приносит 404.

У вас есть 2 возможности:

  1. используйте другое имя строки запроса, что-то вроде /custom-search?cs=mysearchstring затем внутри шаблона страницы используйте переменную $_GET['cs'] вместо переменной $_GET['s']
  2. отправьте все свои поиски на домашний url: /?s=mysearchstring но /?s=mysearchstring 'template_include' чтобы использовать custom-search.php вместо search.php . Это можно сделать, не создавая «пользовательский поиск» страницы.

Решение 1

Единственное, что вам нужно сделать, это использовать строку запроса 'cs' вместо 's' , а затем использовать внутри вашего шаблона:

 // ... $s = filter_input(INPUT_GET, 'cs', FILTER_SANITIZE_STRING); $allsearch = &new WP_Query("s=$s&showposts=-1"); // ... 

Решение 2

Удалите страницу «пользовательская страница», которая использует шаблон "Custom Search" : вам это не нужно. Вы можете удалить заголовки шаблонов вообще, если хотите.

Отправьте все ваши поисковые запросы в /?s=mysearchstring .

Теперь к вашим functions.php add

 add_filter('template_include', 'my_custom_search_template'); function my_custom_search_template( $template ) { if ( is_search() ) { $ct = locate_template('custom-search.php', false, false); if ( $ct ) $template = $ct; } return $template; } 

Таким образом, все поисковые запросы будут отображаться с использованием вашего custom-search.php (если он существует). Обратите внимание, что поиск уже выполняется в основном запросе, поэтому вам не нужно запускать его снова, если вы хотите установить posts_per_page для -1, используйте pre_get_posts :

 add_action('pre_get_posts', 'search_no_paging'); function search_no_paging( $q ) { if ( $q->is_main_query() && $q->is_search() && ! is_admin() ) { $q->set('posts_per_page', -1); } } 

И в вашем custom-search.php используйте:

 global $wp_query; $count = $wp_query->post_count; $hits = $count == 1 ? $count." ".__("hit for","goodweb") : $count." ".__("hits for","goodweb"); get_header(); while( have_posts() ) { the_post(); // your loop here } 

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


Решение 1 – лучший выбор, если вы хотите показывать содержимое страницы рядом с результатами поиска, но если вы создаете эту страницу без контента, с единственной целью использовать пользовательский шаблон для результатов поиска, решение 2 лучше, потому что:

  1. независимо от темы: код можно поместить в плагин и использовать с любой темой, а также не нужно, чтобы страница была создана на бэкэнд
  2. более эффективен: если вы используете решение 1, запускаются два запроса, первый – для получения страницы, второй – для получения результатов поиска; используя решение 2, выполняется только один запрос

Строка GET будет работать так же, как и в любом другом приложении PHP, но вы не можете использовать параметр запроса, который использует WordPress . В этом проблема. WordPress уже использует s . Используйте что-то еще, например «mys».

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