Перед тем, как начать, вы должны убедиться, что на вашем блоге включены ЧПУ, иначе код ничего делать не будет, для этого переходим в Параметры > Постоянные ссылки в админке.
Итак, по умолчанию URL результатов поиска в WordPress выглядит вот так:
Мы же постараемся придать ему следующий вид:
P.S. эти два варианта запросов — всего лишь пример, не пытайтесь вводить их у меня на блоге, у вас из этого ничего не выйдет, т.к. мой поиск реализован другим способом.
Это наиболее удачная реализация, потому что в итоге мы получаем такой же полноценный поиск, с поддержкой кириллицы, а также специальных символов, например фразы в кавычках.
function true_rewrite_search_results_permalink() { global $wp_rewrite; // обязательно проверим, включены ли чпу, чтобы не закосячить весь поиск if ( !isset( $wp_rewrite ) || !is_object( $wp_rewrite ) || !$wp_rewrite->using_permalinks() ) return; if ( is_search() && !is_admin() && strpos( $_SERVER['REQUEST_URI'], "/search/") === false && ! empty( $_GET['s'] ) ) { wp_redirect( site_url() . "/search/" . urlencode( get_query_var( 's' ) ) ); exit; } } add_action( 'template_redirect', 'true_rewrite_search_results_permalink' ); // вторая функция нужна для поддержки русских букв и специальных символов function true_urldecode_s($query) { if (is_search()) { $query->query_vars['s'] = urldecode( $query->query_vars['s'] ); } return $query; } add_filter('parse_query', 'true_urldecode_s');
В этом варианте кириллица и спец. символы работать не будут (используйте 1-й вариант, если поисковые запросы будут на русском). Простое добавление в код второй функции из предыдущего примера не даст никакого эффекта.
RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC] RewriteRule ^$ /search/%1/? [NC,R,L]
Конечно же слово «search» в обоих примерах вы можете изменить на своё усмотрение (обратите внимание, в первом примере два вхождения слова).
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Спасибо, помогло.
Поисковый запрос на первый раз выдает результат - все как и должно быть.
Но когда со страницы "xxx.xx/search/слово+для+поиска" снова используешь поиск - то выводит на страницу "xxx.xx/search?s=слово+для+поиска"
Сорри за долгий ответ — был в отъезде.
Советую обратить внимание на атрибут
action
формы.Спасибо - заработало как надо, в уроках по WP этого почему-то не сказали)
Первый вариант не работает. Первая функция делает редирект, а вторая после редиректа уже не видит
$query->query_vars['s']
так как этой переменной, по факту уже не существует.