В стандартной структуре постоянных ссылок WordPress часто используется формат, включающий категории: /category/post-name/. Однако иногда по разным причинам категория в URL может не отображаться, что приводит к менее информативным, а иногда и к проблемам SEO-ссылкам. В этой статье мы разберём причины отсутствия категории в URL, способы исправления и оптимизации, а также приведём примеры кода и полезных плагинов.
Почему категория может отсутствовать в URL WordPress
Первое, что нужно понимать — структура постоянных ссылок настраивается в админке WordPress в разделе Настройки > Постоянные ссылки. Если выбран формат без категории, например /postname/, категория в URL не будет отображаться.
Однако даже при использовании формата /category/postname/ бывает, что категория не появляется. Основные причины:
- Конфликт с плагинами SEO (например, Yoast SEO, Rank Math), которые могут изменять структуру ссылок.
- Использование кастомных типов записей или таксономий, которые не поддерживают категории в URL.
- Отсутствие категории у записи или назначение нескольких категорий — WordPress выбирает по умолчанию первую или основную.
- Кэширование, которое не обновило правила перезаписи (rewrite rules).
Как проверить и настроить структуру ссылок с категорией
Для начала убедитесь, что в админке в Настройки > Постоянные ссылки установлен формат, включающий категорию, например:
/category/%category%/%postname%/
Если такого варианта нет, можно выбрать Произвольно и вписать вручную. После сохранения настроек WordPress обновит правила перезаписи.
Если категория всё равно не появляется, попробуйте сбросить пермалинки. Для этого снова зайдите в настройки и нажмите Сохранить изменения без правок. Это заставит WordPress обновить rewrite rules.
Использование кода для принудительного добавления категории в URL (wpskills)
Если стандартные методы не помогли, можно добавить кастомные фильтры в functions.php вашей темы, чтобы корректно формировать URL с категорией.
function wpskills_custom_post_link( $permalink, $post ) {
if ( $post->post_type !== 'post' ) {
return $permalink;
}
$categories = get_the_category( $post->ID );
if ( ! empty( $categories ) ) {
// Берём первую категорию
$category = $categories[0]->slug;
} else {
$category = 'uncategorized';
}
$permalink = str_replace( '%category%', $category, $permalink );
return $permalink;
}
add_filter( 'post_link', 'wpskills_custom_post_link', 10, 2 );
Этот фильтр заменяет тег %category% в постоянной ссылке на слаг первой категории, если она есть, иначе ставит uncategorized.
Обработка нескольких категорий и выбор главной
Если у записи несколько категорий, WordPress по умолчанию берёт первую в алфавитном порядке. Это не всегда удобно. Чтобы задать главную категорию вручную, можно использовать плагин Clearfy Pro, который позволяет управлять главной категорией для SEO.
Альтернативно можно реализовать это самостоятельно через метаполе, например:
function wpskills_get_primary_category_slug( $post_id ) {
$primary_category_id = get_post_meta( $post_id, '_wpskills_primary_category', true );
if ( $primary_category_id ) {
$category = get_category( $primary_category_id );
if ( $category && ! is_wp_error( $category ) ) {
return $category->slug;
}
}
$categories = get_the_category( $post_id );
return ! empty( $categories ) ? $categories[0]->slug : 'uncategorized';
}
function wpskills_custom_post_link_primary( $permalink, $post ) {
if ( $post->post_type !== 'post' ) {
return $permalink;
}
$category_slug = wpskills_get_primary_category_slug( $post->ID );
$permalink = str_replace( '%category%', $category_slug, $permalink );
return $permalink;
}
add_filter( 'post_link', 'wpskills_custom_post_link_primary', 10, 2 );
Для удобства можно создать метабокс в админке для выбора главной категории, используя стандартные хуки WordPress.
Как проверить работу и сбросить кэш
После внесения изменений важно очистить кэш сайта и браузера. Если используете кеширующие плагины, например Clearfy Pro с функцией оптимизации, обязательно выполните очистку кеша.
Также рекомендуется проверить работу правил перезаписи, вызвав функцию flush_rewrite_rules() один раз после изменений. Это можно сделать с помощью временного кода:
function wpskills_flush_rewrite() {
flush_rewrite_rules();
}
add_action( 'init', 'wpskills_flush_rewrite' );
После первого запуска удалите этот код, чтобы не вызывать сброс каждый раз.
Используемые плагины для управления URL с категориями
Помимо ручных настроек, рекомендуем обратить внимание на следующие плагины:
- Yoast SEO — позволяет управлять отображением категории в URL, задавать главную категорию.
- Clearfy Pro — расширенные настройки SEO, включая управление главной категорией и оптимизацию ссылок.
- Permalink Manager Lite — для гибкой настройки постоянных ссылок, в том числе с категориями.
Вывод
Отсутствие категории в URL WordPress — частая проблема, которая решается правильной настройкой постоянных ссылок, обновлением правил перезаписи и при необходимости добавлением кастомного кода. Использование плагинов, таких как Clearfy Pro, упрощает управление и улучшает SEO.
С помощью приведённых примеров вы сможете скорректировать структуру ссылок под свои задачи и обеспечить корректное отображение категории в URL.