При создании записей в WordPress без указания категории по умолчанию им присваивается категория «Без рубрики» («Uncategorized»). Это приводит к появлению лишней части ссылки, например: https://example.com/bez-rubriki/nazvanie-zapisi
. Если вы хотите убрать «bez-rubriki» из URL, то вам потребуется немного модифицировать настройки и добавить пользовательский код. В этой статье я покажу, как это сделать и избежать ошибок 404.
Шаг 1: Проблема категории «Uncategorized»
В WordPress для записей без категории используется дефолтная категория «Uncategorized» (или её локализованный перевод, например, «Без рубрики»). Даже если такая категория не нужна, она продолжает отображаться в URL, что может ухудшить структуру ссылок и восприятие их пользователями.
Некоторые пытаются решить эту проблему, переименовывая категорию «Без рубрики» на что-то более подходящее. Но в нашем случае цель — полностью убрать эту категорию из ссылки.
Шаг 2: Пример проблемы 404 при удалении «Без рубрики»
Простой подход, при котором убирается категория из ссылки через настройку постоянных ссылок или фильтр post_link
, может привести к ошибке 404. Это происходит потому, что WordPress больше не понимает, как обрабатывать URL без категории, если не обновить правила маршрутизации.
Рассмотрим рабочее решение, которое не только удалит «uncategorized» из ссылок, но и сделает их корректно обрабатываемыми.
Шаг 3: Рабочий код для удаления «Без рубрики»
Добавьте следующий код в файл functions.php
вашей темы или создайте отдельный плагин:
// Удаление категории из ссылки
function remove_category_from_permalink($permalink, $post) {
if ($post->post_type == 'post') {
$permalink = str_replace('/bez-rubriki/', '/', $permalink);
}
return $permalink;
}
add_filter('post_link', 'remove_category_from_permalink', 10, 2);
// Изменение правил маршрутизации
function remove_category_rewrite_rules($rules) {
$new_rules = [];
// Добавляем правило для постов без рубрики
$new_rules['([^/]+)/?$'] = 'index.php?name=$matches[1]';
return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'remove_category_rewrite_rules');
// Очищаем правила и обновляем их
function flush_rewrite_rules_on_activation() {
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'flush_rewrite_rules_on_activation');
register_deactivation_hook(__FILE__, 'flush_rewrite_rules_on_activation');
Что делает этот код?
- Удаляет «bez-rubriki» из URL: Фильтр
post_link
проверяет, относится ли ссылка к записи (post
) и удаляет из неё часть/bez-rubriki/
. - Обновляет правила маршрутизации: Добавляется новое правило, позволяющее WordPress правильно обрабатывать URL без категории.
- Обновляет правила маршрутизации при активации: Функция
flush_rewrite_rules
очищает и обновляет rewrite-правила при активации или деактивации плагина.
Шаг 4: Сохранение постоянных ссылок
После добавления кода выполните следующие действия:
- Перейдите в админ-панель WordPress.
- Откройте Настройки → Постоянные ссылки.
- Нажмите кнопку Сохранить изменения, даже если вы ничего не меняли.
Это действие обновит правила маршрутизации, и WordPress начнёт правильно обрабатывать новые ссылки.
Шаг 5: Проверка работы
- Создайте запись без категории.
- Откройте её ссылку. Она должна выглядеть как
https://example.com/nazvanie-zapisi
. - Убедитесь, что запись открывается без ошибки 404.
Вывод
Теперь вы знаете, как удалить категорию «Без рубрики» из ссылок записей в WordPress. Это улучшит читаемость URL, сделает их короче и понятнее для пользователей. Такое изменение положительно скажется на восприятии сайта и его SEO.