Как удалить /blog/ из URL-адресов в WordPress?
Здравствуйте! У меня возникла проблема с настройкой красивых URL-адресов на сайте WordPress. Я хочу, чтобы ссылки выглядели как https://sait.ru/usluga/, но WordPress автоматически генерирует такие URL: https://sait.ru/blog/service/usluga/.
Я могу смириться с наличием /service/ в URL, но наличие /blog/ совершенно недопустимо для моих целей.
Я пробовал(а) вносить изменения в файл functions.php с использованием условных операторов (if), но это приводит к тому, что обычные страницы перестают создаваться, а создаются только кастомные типы записей.
Подскажите, пожалуйста, как можно решить эту проблему и удалить /blog/ из URL-адресов в WordPress?
WordPress автоматически добавляет “/blog/” в URL из-за стандартных настроек постоянных ссылок и структуры типов записей. Чтобы удалить “/blog/” из URL-адресов, вам нужно изменить настройки постоянных ссылок, использовать правильные аргументы при регистрации кастомных типов записей или установить специальные плагины для управления структурой URL.
- Настройка постоянных ссылок в WordPress
- Регистрация кастомных типов записей без /blog/
- Использование functions.php для изменения URL
- Плагины для управления структурой URL
- Решение проблем с существующими URL
- База данных и редиректы
- Проверка и тестирование изменений
Настройка постоянных ссылок в WordPress
Наиболее распространенной причиной появления “/blog/” в URL является стандартная структура постоянных ссылок в WordPress. Чтобы решить эту проблему, начните с базовых настроек:
- Зайдите в Настройки → Постоянные ссылки в административной панели WordPress
- Выберите структуру “Название записи” или “Пользовательская структура”
- Для структуры “Название записи” установите параметр
/%postname%/ - Сохраните изменения
Важно: После изменения настроек постоянных ссылок WordPress автоматически создаст новые URL-адресов, но старые ссылки могут продолжать работать. Если вы видите “/blog/” в URL после этих изменений, проблема, скорее всего, связана с типами записей или плагинами.
Регистрация кастомных типов записей без /blog/
При регистрации кастомных типов записей в WordPress ключевым параметром является rewrite, который управляет структурой URL. Чтобы избежать добавления “/blog/”, используйте правильные параметры:
function register_custom_service_post_type() {
$args = array(
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'usluga', // без /blog/
'with_front' => false // предотвращает добавление /blog/
),
'menu_icon' => 'dashicons-admin-tools',
'supports' => array('title', 'editor', 'thumbnail')
);
register_post_type('usluga', $args);
}
add_action('init', 'register_custom_service_post_type');
Ключевые параметры:
slug- определяет базовую часть URLwith_front=>false- предотвращает добавление префикса типа записейhas_archive=>true- создает архивную страницу для типа записей
Использование functions.php для изменения URL
Если вы уже пробовали использовать conditional operators в functions.php, но столкнулись с проблемами, вот более правильный подход:
// Удаление /blog/ из URL всех типов записей
function remove_blog_base($wp_rewrite) {
$rules = $wp_rewrite->rules;
// Находим и удаляем правила, содержащие /blog/
$new_rules = array();
foreach ($rules as $rule => $rewrite) {
if (strpos($rule, 'blog/') === false) {
$new_rules[$rule] = $rewrite;
}
}
$wp_rewrite->rules = $new_rules;
return $wp_rewrite;
}
add_filter('generate_rewrite_rules', 'remove_blog_base');
// Пересоздание правил перезаписи
function flush_rewrite_rules_after_theme_change() {
flush_rewrite_rules();
}
add_action('after_switch_theme', 'flush_rewrite_rules_after_theme_change');
Внимание: Этот код может повлиять на работу других плагинов и функционала сайта. Всегда создавайте резервную копию перед внесением изменений.
Плагины для управления структурой URL
Существуют специальные плагины, которые помогут решить проблему с “/blog/” в URL:
1. Permalink Manager Lite
Этот плагин позволяет управлять структурой URL для всех типов записей и таксономий:
- Автоматически обновляет URL при изменении slug
- Поддерживает массовое обновление URL
- Работает с кастомными структурами
- Позволяет создавать красивые URL без лишних префиксов
2. Custom Post Type Permalinks
Специализированный плагин для управления постоянными ссылками кастомных типов записей:
- Полный контроль над структурой URL
- Возможность исключить базовые префиксы
- Интеграция с SEO-плагинами
- Экспорт/импорт настроек
Решение проблем с существующими URL
Если у вас уже есть контент с URL, содержащими “/blog/”, вам нужно:
-
Обновить существующие URL:
- Используйте плагин Permalink Manager для массового обновления
- Или создайте собственный скрипт для обновления базы данных
-
Настроить редиректы:
php// Добавление редиректов со старых URL на новые add_action('template_redirect', 'old_blog_url_redirect'); function old_blog_url_redirect() { if (preg_match('/^\/blog\/(.*)$/', $_SERVER['REQUEST_URI'], $matches)) { wp_redirect(home_url('/' . $matches[1]), 301); exit(); } }
База данных и редиректы
В некоторых случаях может потребоваться прямое вмешательство в базу данных:
-
Резервное копирование: Всегда создавайте резервную копию базы данных перед внесением изменений
-
SQL запрос для обновления URL:
sqlUPDATE wp_posts SET post_name = REPLACE(post_name, 'blog/', '') WHERE post_name LIKE 'blog/%'; -
Обновление терминов таксономии:
sqlUPDATE wp_terms SET slug = REPLACE(slug, 'blog/', '') WHERE slug LIKE 'blog/%';
Проверка и тестирование изменений
После внесения всех изменений необходимо:
-
Очистить кэш:
- Очистить кэш плагинов (если используете WP Rocket, W3 Total Cache и т.д.)
- Очистить кэш браузера
- Проверить работу сайта в режиме инкогнито
-
Проверить URL:
- Создать новую запись/страницу
- Убедиться, что URL не содержат “/blog/”
- Проверить работу старых ссылок (должны редиректить на новые)
-
Тестировать функционал:
- Убедиться, что все страницы доступны
- Проверить работу навигации
- Тестировать поиск по сайту
Источники
- Permalink Manager Lite – WordPress plugin
- Custom Post Type Permalinks Plugin Documentation
- WordPress Codex - Post Types
- WordPress Codex - Rewrite API
Заключение
Для удаления “/blog/” из URL-адресов в WordPress выполните следующие шаги:
- Начните с базовых настроек постоянных ссылок в админ-панели
- При регистрации кастомных типов записей используйте правильные параметры
rewrite - При необходимости используйте специализированные плагины типа Permalink Manager
- Настройте редиректы со старых URL на новые
- Тщательно протестируйте все изменения
Основной проблемой при попытках использовать условные операторы в functions.php является неправильный подход к перезаписи URL. Вместо этого следует использовать хуки WordPress и специализированные плагины, которые предназначены именно для управления структурой URL.