Как удалить префикс «category» из URL рубрик

Думаю многие знают, как превратить ссылки в WordPress из /?p=1 в /категория/пост (это делается в админке в Настройки > Постоянные ссылки).

Однако первое, что бросается в глаза, это довольно странные URL у рубрик, вот такие /префикс-рубрики/рубрика (например /category/wordpress). Я не понимаю, для чего тут нужен префикс для рубрик, ведь:

  • для SEO это означает, что мы находимся в категории «префикс-рубрики» и подкатегории «рубрика», но это не так,
  • чем длиннее URL страницы сайта, тем хуже,
  • невозможно осуществлять навигацию по URL — то есть, если перейти по адресу http://ваш-сайт/category, то получим ошибку 404.

Короче говоря, нам нужно избавиться от префикса.

Возможно у вас возникнет вопрос — если у префикса категорий столько минусов, то зачем его вообще предусмотрели в WordPress? Ответ — чтобы отличать от меток. У меток, как и у категорий тоже есть префикс (по умолчанию — tag). И, если из URL рубрик мы ещё можем удалить category, то из URL меток это делать ни к чему.

В новых версиях WordPress это делается легко и просто — через файл .htaccess. Дело в том, что каждая наша рубрика доступна по двум URL — с префиксом и без. Тогда давайте поставим 301 редирект, этим мы сразу убьем двух зайцев:

  1. предотвратим возникновение дублей контента,
  2. избавимся от префикса category.

Прежде всего убедитесь, что настройки постоянных ссылок у вас выглядят примерно вот так:

Настройки постоянных ссылок в WordPress, префиксы для рубрик

Если в качестве префикса для рубрик у вас используется какое-либо другое слово, то есть не category, то обязательно верните префиксу значение по умолчанию (category), либо вообще оставьте поле пустым (как на скриншоте).

Затем вставьте этот код (предварительно заменив URL на URL своего сайта) в файл .htaccess, который находится непосредственно в папке с сайтом:

<IfModule mod_rewrite.c>
RedirectMatch 301 /category/(.*) https://misha.blog/$1
</IfModule>

Относительно mod_rewrite не волнуйтесь, после обновления настроек постоянных ссылок он уже автоматически будет включён.

Избавляемся от «category» в старых версиях WordPress (до 3.4)

Тут стандартными средствами удалить префикс из URL не получится, можно изменить лишь слово, которое используется в качестве префикса, если оставить поле пустым то, заюзается слово category.

Ещё я натыкался на пару предназначенных для этого плагинов в интернете, но все они были косячные, после их установки стали пропадать страницы. Выкладываю решение, которое стояло на моем блоге (когда версия WordPress была ниже 3.4).

Итак, всего два шага и всё будет готово!

Первый шаг — хук для functions.php

Скопируйте этот код и вставьте его в файл functions.php вашей темы:

function true_remove_category_from_category($cat_url) {
	$cat_url = str_replace('/category', '', $cat_url);
	return $cat_url;
}
add_filter('category_link', 'true_remove_category_from_category', 1, 1);

Шаг второй — обновляем настройки постоянных ссылок в админке

Изменяем в настройках структуру постоянных ссылок на произвольную и вписываем туда что-то типа /%category%/%postname%.html или /%category%/%postname%.htm.

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

Список плагинов

Для тех, кто не любит копаться в коде и для решения каждой задачи старается подобрать подходящий плагин, вот список плагинов, позволяющих удалить префикс рубрик из URL:

  • WP No Category Base — не требует дополнительной настройки. Прекрасно работает и с подкатегориями, перенаправление осуществляет через 301 редирект.
  • No category parents — этот плагин удаляет не только префикс рубрик, но и родительские категории из URL.
  • Remove Category URL — ещё один плагин, который по сути является копией WP No Category Base.

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

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

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