Как изменить URL результатов поиска в WordPress

Перед тем, как начать, вы должны убедиться, что на вашем блоге включены ЧПУ, иначе код ничего делать не будет, для этого переходим в Параметры > Постоянные ссылки в админке.

Итак, по умолчанию URL результатов поиска в WordPress выглядит вот так:

URL результатов поиска по умолчанию

Мы же постараемся придать ему следующий вид:

измененный URL результатов поиска

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

Реализация через functions.php

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

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');

Реализация через .htaccess

В этом варианте кириллица и спец. символы работать не будут (используйте 1-й вариант, если поисковые запросы будут на русском). Простое добавление в код второй функции из предыдущего примера не даст никакого эффекта.

RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]

Конечно же слово «search» в обоих примерах вы можете изменить на своё усмотрение (обратите внимание, в первом примере два вхождения слова).

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 4

  • Дмитрий17 июля 2014 в 10:07 #

    Спасибо, помогло.

  • Дима27 августа 2015 в 16:08 #

    Поисковый запрос на первый раз выдает результат - все как и должно быть.
    Но когда со страницы "xxx.xx/search/слово+для+поиска" снова используешь поиск - то выводит на страницу "xxx.xx/search?s=слово+для+поиска"

    • Миша31 августа 2015 в 13:08 #

      Сорри за долгий ответ — был в отъезде.

      Советую обратить внимание на атрибут action формы.

      <form action="<?php echo site_url() ?>">

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • alex morozov: Добрый вечер! у меня возникла следующая проблема. Я делаю фотоальбомы, чтобы они выглядели "как в контакте". Так вот, та...

  • Vladislav: Если эту муть убрать, то исчезает меню, и появляется описание под миниатюрами, которого не должно быть, как вы видите, я...

  • Миша: Либо размеры изображений вам помогут, либо CSS. И строку 14 гляньте, там муть какая-то.

  • Vladislav: Подправил имеющийся у меня код, по вашим рекомендациям, миниатюры начали отображаться, но они стали очень огромными, что...

  • Миша: Лишь предложил решение. Думаю можно нашаманить и так, чтобы чисто для рубрик было, не уверен только, что обойдётся без и...