Думаю многие знают, как превратить ссылки в WordPress из /?p=1
в /категория/пост
(это делается в админке в Настройки > Постоянные ссылки).
Однако первое, что бросается в глаза, это довольно странные URL у рубрик, вот такие /префикс-рубрики/рубрика
(например /category/wordpress
). Я не понимаю, для чего тут нужен префикс для рубрик, ведь:
Короче говоря, нам нужно избавиться от префикса.
Возможно у вас возникнет вопрос — если у префикса категорий столько минусов, то зачем его вообще предусмотрели в WordPress? Ответ — чтобы отличать от меток. У меток, как и у категорий тоже есть префикс (по умолчанию — tag). И, если из URL рубрик мы ещё можем удалить category, то из URL меток это делать ни к чему.
В новых версиях WordPress это делается легко и просто — через файл .htaccess
. Дело в том, что каждая наша рубрика доступна по двум URL — с префиксом и без. Тогда давайте поставим 301 редирект, этим мы сразу убьем двух зайцев:
Прежде всего убедитесь, что настройки постоянных ссылок у вас выглядят примерно вот так:
Если в качестве префикса для рубрик у вас используется какое-либо другое слово, то есть не category, то обязательно верните префиксу значение по умолчанию (category), либо вообще оставьте поле пустым (как на скриншоте).
Затем вставьте этот код (предварительно заменив URL на URL своего сайта) в файл .htaccess
, который находится непосредственно в папке с сайтом:
<IfModule mod_rewrite.c> RedirectMatch 301 /category/(.*) https://misha.agency/$1 </IfModule>
Относительно mod_rewrite не волнуйтесь, после обновления настроек постоянных ссылок он уже автоматически будет включён.
Тут стандартными средствами удалить префикс из URL не получится, можно изменить лишь слово, которое используется в качестве префикса, если оставить поле пустым то, заюзается слово category.
Ещё я натыкался на пару предназначенных для этого плагинов в интернете, но все они были косячные, после их установки стали пропадать страницы. Выкладываю решение, которое стояло на моем блоге (когда версия WordPress была ниже 3.4).
Итак, всего два шага и всё будет готово!
Скопируйте этот код и вставьте его в файл 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:
Каждый из этих плагинов доступен в официальном репозитории плагинов WordPress, а значит, устанавливается через админку сайта.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Похоже что версия вордпресса 3.4 сама начала справляться с этой проблемой. Раньше у меня стоял плагин для удаления слово категория их адреса, но в версии 3.4 он наоборот стал вредить.. Выкинул его и все стало хорошо.
да,да,это ты верно сказал, в 3.4 уже не катит этот способ) я тоже убрал этот хук, правда слово category появилось теперь
Пост обновлён, информация теперь актуальна для новых версий WordPress.
Если поставить это редирект, то из урлов автоматически уберется /category/?
урлы с category будут редиректиться на урлы без category через 301
И еще наверное в robots.txt надо закрывать /category/, да?
Нет не нужно :)
Спасибо за решение. Выручил, дружище :)
Рад помочь :)
Доброго дня.
Такой вопрос. Сайт только создал, и сразу решил избавиться от этой проблемы. Можно ли сделать так, чтобы не перебрасывало через 301 редирект, а изначально убрать "category" из урла... Что имею ввиду?
При наведении мышкой на категории, внизу в браузере выводится старый адрес по типу: название сайта/category/категория/пост.html при нажатии перекидывает по 301 редиректу сразу в адрес сайта: название сайта/категория/пост.html - что как бы правильно, но хотет бы изначально убрать это слово.
Думаю понятно объяснил )))
Поставил в Префикс для рубрик символ "." (точки) и все ушло - как это может влиять на структуру?
Добрый день!
Могу только сказать, что такой метод используется на многих блогах.
В новых версиях WP по поводу редиректа можно не беспокоиться, ведь рубрики доступны по обоим URL.
Спасибо, Михаил. Поставил точку и думаю этого хватит - как считаете?
Если всё работает, то думаю не о чем беспокоиться :)
Спасибо, друг )))
Добрый день!
У меня задача немного другая стоит.
Есть большой каталог с двумя уровнями категорий. Были ссылки на конечную подкатегорию такого вида:
site.com/category/podcategory
Сейчас я убрал промежуточную родительскую категорию из ссылки и стало так:
site.com/podcategory
* слово category - это для примера, на самом деле там название транслитом.
Как сделать массовый редирект, чтобы из поисковиков попадали на нужную подкатегорию, а не на страницу ошибки 404?
Добрый день!
Ответ на ваш вопрос в этом посту :)
Это не совсем то.
У меня ссылки такого вида были:
site.com/категория_экскаваторы/подкатегория_гусеничные_экскаваторы
А тепреь так:
site.com/подкатегория_гусеничные_экскаваторы
Без родительской категории в ссылке. и Таких категорий больше сотни, каждая со своим назанием. Это не просто /category/
Так вот нужно чтобы с первых ссылок работал редирект на вторы, т.к. с поисковиков много приходит на 404 ошибку...
А каким образом вы убрали промежуточную категорию?
Если вы хотите сделать всё минимальным количеством кода, то лучше через WP_Rewrite.
Не совсем работает в 4.2 версии. Когда site.ru/category/главная категория - то работате номрально, удаляет category, а вот если site.ru/category/главная категория/под категория - тот site.ru/главная категория/под категория 404 ошибка
Да, вижу, согласен. Доработаю код.
Миша, есть доработки?
Здравствуйте Миша.
Столкнулся с выше описанной ситуацией sire.ru/категория/подкатегория выдает 404.
Возможно у вас есть уже решение?
Спасибо.
Доброй ночи. Подскажите, не нашлось ли случайно решение этой проблемы
> sire.ru/категория/подкатегория выдает 404.
Копаю уже вторые сутки - не могу найти решение!
Заранее спасибо!
Здравствуйте!
Вот только что протестировал на версии 4.3.1 вплоть до дочерних категорий третьего уровня — всё работает на ура.
И самое интересное, что вы не первая, у кого не получается. Мне будет интересно взглянуть на ваш сайт и со всем разобраться — напишите мне пожалуйста по email.
Михаил, отправила на почту инфо.
Заранее спасибо!
Привет! А решение нашли? У меня такая же проблема
нашел решение, я лично не посчитал нужным поставить в конец ссылки ".html", как реккомендует Михаил. После прописания /%category%/%postname%.html, всё заработало. Спасибо
Привет!
Огнище! 🔥
было бы еще круто посмотреть вариант для nginx
Спасибо мужик! Помогло, красавец! От души!
Причем на других блогах, на серче писали какую то херню. У тебя все по полочкам. Молодцом, добавил в закладки!
Отлично, рад, что помог!
Мишаня, ты мне помог, и я спешу тебе помочь советов. В блоке комментариев, когда я отправляю тебе сообщение, нажав кнопку ответ, то автоматически создается дублю replytocom. Чтобы это избежать, необходимо поменять в funcions.php часть кода, отвечающую за вывод этих комментов. Чтобы комменты стали скриптом, а не ссылокой. Как принял?
Не совсем понял, какое решение ты предлагаешь)
На какие то рубрики заходит , а на какие то нет ! С чем это связано?
Мне нужно больше информации, чтобы дать вам ответ. Обновляли настройки постоянных ссылок?
Поставил "." из ссылок слово category пропало, но теперь ведет на страницу 404. Как исправить?
Я не давал никаких советов с точкой.
Понятно, метод с файлом htaccess тоже не работает
Вы только код в htaccess вставили или сделали всё описанное в статье?
С помощью модификации .htaccess все работает отлично, но есть одна проблема. Карта сайта, создаваемая модулем Yoast SEO по-прежнему содержит в /category/ в URL, хотя и редиректит на целевой. Подскажите, как модифицировать и в карте сайта? Спасибо.
После ребилда карты ничего не меняется?
В настройках постоянных ссылок category удалено?
В настройках постоянных ссылок стоит опция "произвольно" (/%category%/%postname%.html). Внизу заметил появилось уведомление, о том, что нужно изменить .htaccess на тот, который был изначально. Это просто игнорировать?
Что касается карты сайта от Yoast - она формируется по критерию /%category%/%postname%.html. Если из структуры URL в настройках постоянных ссылок убрать /%category%/, то страницы категорий выдают ошибки 404.
Проблема отлично решилась установкой модуля Remove Category URL. /category/ исчезло и карта сайта выводится нормально. Хотелось решить без плагина, ну хотя-бы так.
Можно в принципе полазить по файлам плагина, разобраться, как он это делает и просто вытащить из него несколько функций.
подскажите как сделать урл без ad-category, получается так /ad-category/kvartiry/kvartiry-na-dlitelnyj-srok/, а нужно вот так /kvartiry/kvartiry-na-dlitelnyj-srok/
вы оставили комментарий к статье, в которой по сути решение этой задачи и описано :)
Михаил, добрый день.
Имеется сайт на wordpress установлена тема DIRECTORY PORTAL V4.3 ,
Особенностью темы является то, что категории справочника и сами карточки организаций, создаются как "свой тип записи" и базовые настройки формирования URL на них не действуют.
В итоге имеем
категория:
Сейчас – site/cat/категория/
Надо – site/категория/
Карточка организации:
Сейчас: site/item/организация/
Надо: site/КАТЕГОРИЯ/организация/
Перепробовал все какие нашел плагины, но так и не решил проблему.
Сможете помочь разобраться? Готов оплатить вашу работу
Добрый день, Дмитрий,
я точно не помню, имеется ли в WP возможность перезаписать таким образом URL произвольных типов постов и таксономий, но могу попробовать, пожалуйста, напишите мне по email.
Спасибо Михаил за отклик, но этой ночью я нашел решение))
Отлично :)
Будет здорово, если вы поделитесь кодом в комментариях — возможно он кому-нибудь пригодится.
Проблему решил но частично.
Облазил кучу сайтов и нашел подсказку на сайте разработчика.
Конкретно тут. Но к сожалению (возможно потому что, тему я не покупал, или там решения для более поздней версии) у меня нету указанной там папки с плагином и фаил этот я не нашел (/wp-content/plugins/ait-toolkit/cpts/item/@item.cpt.neon). Но меня это не остановило и прошарил содержимое всех фаилов в своей теме через Notepad++. Итогом поисков стал фаил dir-item.php, который лежит в папке /wp-content/themes/directory/AIT/Framework/CustomTypes/dir-item.
Вот те части когда, которые отвечают за категории справочника карточку организации:
Категория:
'show_ui' => true,
'rewrite' => array( 'slug' => 'cat' ),
'capabilities' => array(
'assign_terms' => 'assign_dir_category'
Организация:
'rewrite' => array('slug' => 'item'),
'capability_type' => 'ait-dir-item',
'map_meta_cap' => true
Я как бы вообще, не программист и очень плохо рзабираюсь в верстке, но в этом коде я увидел как раз то что я искал.
Путем замены ( 'slug' => 'cat' ) на ( 'slug' => '/' ) я избавился изменил URL категорий на сайте с site/cat/категория/ на site/категория/.
Но вот с URL организаций я не справился пока, как я понимаю значение item в строке ('slug' => 'item'), надо заменить на какую то функцию, что бы сюда подставлялась родительская категория. Но опять же, я не программист и тут мне тяжело.
P.s.: cейчас я пытаюсь понять как формируются хлебные крошки, .т.к в них отображается именно родительская категория карточки организации и как я понимаю это ключ к тому, что бы настроить вложенность URL. (возьму ту же функцию и поставлю вместо item). Ну или как то так.. Если кто решил эту задаяу буду рад помощи.
В поисках решения набрел на плагин, WP Permastructure. После его активации, в разделе "Настройки постоянных" добавляется раздел Custom post type permalink settings, где можно задать параметры url произвольных записей.
Попробовал вот так:
/%postname%
В этом случае карточка организации открывается по адресу
сайт/название организации
Потом, попробовал вот так:
/%ait-dir-item-category%/%postname%
В этом случае карточка организации открывается по адресу
сайт/категория/название организации .
Казалось бы все классно, но теперь все страницы-карточки отдают 404-ую ошибку )) Михаил, нужна ваша помощь )
Всем привет!
Вариант с 301-редиректом неплох, но не решает основную задачу - избавиться от префикса в категориях.
ПС анализируют код страниц, в коде везде числятся /category/slug/ - а далее уже идет 301 редирект через .htaccess
Google, например, не любит когда много редиректов. Поэтому, рекомендую смотреть в сторону плагинов или собственных функций, убирающих префикс сразу из кода страниц.
Привет, могу предложить вот такой вариант.
Не знаю как этот код, а я себе фот этот поставил
RewriteRule ^category/(.+)$ httр://ваш сайт.ру/$1 [R=301,L]
И он прекрасно у меня работает с категориями и подкатегориями
Подскажите пожалуйста.
У меня такой вид структуры хлебных крошек:
Главная › Статьи › О психотерапии › Название статьи
О психотерапии URL - /category/stati/o-psihoterapii/.
С помощью вашей инструкции category убрал, а как еще убрать stati? (не спрашивайте зачем)
Спасибо помог решить а то я уже костилы думал пилить)))!
Огромное спасибо автору, мне помог хук для functions.php . Вообще часто нахожу решения именно на данном сайте. Спасибо за труды!
Подскажите, нужен ли редирект, когда в префикс для рубрик, я ставлю обычную точку?
Это убирает префикс, но не понятно создает ли какие то другие проблемы?
Этот способ стандартный способ вордпресс