Как в wordpress сделать чтобы url категории заканчивался слешем?
Как сделать чтобы в url сайта категории, тегов в конце адреса был слеш
Сейчас так:
https://domain.ru/category https://domain.ru/tag/nazvanie |
https://domain.ru/category https://domain.ru/tag/nazvanie
А сделать чтобы было так:
https://domain.ru/category/ https://domain.ru/tag/nazvanie/ |
https://domain.ru/category/ https://domain.ru/tag/nazvanie/
Дополнительно:
не забывайте что слешем семантически дожен заканчиваться каталог, или раздел через ЧПУ
файл должен оставаться без слеша.
Ответы:
WordPress functions.php (для категорий, нужно очистить кэш wp (если используется)):
// add a slash at the end of the url for categories function add_url_slash_from_categories() { global $wp_rewrite; $wp_rewrite->category_base = 'category/'; $wp_rewrite->tag_base = 'tag/'; $wp_rewrite->flush_rules(); } add_action('init', 'add_url_slash_from_categories'); |
// add a slash at the end of the url for categories function add_url_slash_from_categories() { global $wp_rewrite; $wp_rewrite->category_base = 'category/'; $wp_rewrite->tag_base = 'tag/'; $wp_rewrite->flush_rules(); } add_action('init', 'add_url_slash_from_categories');
WordPress functions.php (для всех, нужно очистить кэш wp (если используется)):
// add a slash at the end of the url of all urls, excluding files function add_url_slash($url) { if (!preg_match('/.[a-zA-Z0-9]+$/', $url)) { $url = trailingslashit($url); } return $url; } add_filter('add_url_slash', 'add_slash_to_all_urls'); |
// add a slash at the end of the url of all urls, excluding files function add_url_slash($url) { if (!preg_match('/.[a-zA-Z0-9]+$/', $url)) { $url = trailingslashit($url); } return $url; } add_filter('add_url_slash', 'add_slash_to_all_urls');
.htaccess (для всех, 301 редирект):
# set 301 redirects for all urls without a slash at the end to a slash RewriteEngine On RewriteBase / RewriteRule ^category/(.*)$ /category/$1/ [R=301,L] RewriteRule ^tag/(.*)$ /tag/$1/ [R=301,L] |
# set 301 redirects for all urls without a slash at the end to a slash RewriteEngine On RewriteBase / RewriteRule ^category/(.*)$ /category/$1/ [R=301,L] RewriteRule ^tag/(.*)$ /tag/$1/ [R=301,L]
- Подкскажи если ставить слэш по всем страницам, нужно и functions и в .htaccess код добавлять?
Поставить слеш в настройках пермалнков
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В WordPress слеш на конце URL обычно управляется настройками постоянных ссылок и функцией
trailingslashit(). Если структура permalink настроена со слешем, категории и метки тоже должны открываться со слешем, а вариант без слеша должен редиректить на вариант со слешем.Первое, что нужно сделать: зайти в “Настройки → Постоянные ссылки” и просто нажать “Сохранить”. Это сбросит rewrite rules. В большинстве случаев этого достаточно.
Не стоит вызывать
$wp_rewrite->flush_rules()на каждомinit. Это тяжёлая операция, её нельзя запускать при каждом открытии страницы. Если нужно программно сбросить правила, делайте это при активации плагина или вручную.Если нужен принудительный редирект для URL без слеша, можно использовать canonical redirect WordPress. Обычно он уже включён. Проверьте, что не отключён фильтр
redirect_canonicalи что кэш/CDN не ломает редиректы.Для кастомных баз категорий и меток настройте их в админке или через rewrite:
add_action('init', function () { global $wp_rewrite; $wp_rewrite->category_base = 'category'; $wp_rewrite->tag_base = 'tag'; });
После такой правки один раз пересохраните постоянные ссылки. Не добавляйте flush внутрь этого кода.
Если проблема только на nginx/apache, проверьте серверные редиректы. Иногда сервер отдаёт оба варианта без редиректа, а WordPress не успевает обработать запрос из-за правил в конфиге. Для SEO лучше иметь один канонический вариант: либо со слешем, либо без, но не оба одновременно.