В WordPress по умолчанию структура ссылок задается в настройках постоянных ссылок, но иногда необходимо реализовать более тонкую настройку URL без использования плагинов. Это может быть полезно для оптимизации SEO, улучшения юзабилити или решения специфических задач проекта.
Почему стоит менять структуру URL вручную
Изменение URL через панель администратора — это просто, но ограничено стандартными вариантами. Когда нужно создать кастомные ссылки для определенных типов записей, таксономий или даже динамических страниц, встроенных средств может не хватить.
Использование плагинов часто добавляет лишний код и нагрузку, а ручное управление дает полный контроль и оптимизацию производительности.
Также, ручное изменение позволяет интегрировать дополнительные параметры, например, языковые префиксы, фильтры или ID, что сложно реализовать через стандартные настройки.
Как работает система маршрутизации WordPress
В основе работы URL в WordPress лежит rewrite API — набор функций и правил, которые преобразуют URL в запросы к базе данных. Основные элементы:
- Правила перезаписи (rewrite rules) — сопоставляют URL с параметрами запроса.
- Параметры запроса (query vars) — переменные, которые передаются в WP_Query.
- Хуки фильтров — для добавления или изменения правил и параметров.
Для изменения структуры нужно работать с этими элементами, регистрируя свои правила и параметры.
Добавление пользовательской структуры URL для кастомного типа записи
Рассмотрим пример, как изменить URL для кастомного типа записи portfolio, чтобы адрес выглядел как site.ru/projects/название-проекта/, а не стандартный site.ru/portfolio/название-проекта/.
Для этого нужно добавить правила перезаписи и изменить базу для типа записи.
Регистрация типа записи с новой базой
function wpbit_register_custom_post_type() {
register_post_type('portfolio', [
'labels' => [
'name' => 'Проекты',
'singular_name' => 'Проект',
],
'public' => true,
'has_archive' => false,
'rewrite' => ['slug' => 'projects', 'with_front' => false],
'supports' => ['title', 'editor', 'thumbnail'],
]);
}
add_action('init', 'wpbit_register_custom_post_type');Здесь мы указываем параметр rewrite['slug'] = 'projects', чтобы изменить базовый сегмент URL.
Добавление новых правил перезаписи
После регистрации типа записи нужно сбросить правила перезаписи, чтобы WordPress их обновил. Это можно сделать вручную в админке или программно:
function wpbit_flush_rewrite_rules() {
wpbit_register_custom_post_type();
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'wpbit_flush_rewrite_rules');Важно вызывать flush_rewrite_rules() только при активации плагина или темы, иначе это замедлит сайт.
Добавление пользовательских параметров в URL — пример с фильтрами
Иногда нужно добавить в URL дополнительные параметры, например, фильтр категории, без использования GET-параметров. Сделаем пример для кастомного фильтра по атрибуту color для записей типа product.
Регистрация параметра запроса
function wpbit_add_query_vars($vars) {
$vars[] = 'color';
return $vars;
}
add_filter('query_vars', 'wpbit_add_query_vars');Добавление правила перезаписи
function wpbit_add_rewrite_rules() {
add_rewrite_rule('^products/color/([^/]+)/?', 'index.php?post_type=product&color=$matches[1]', 'top');
}
add_action('init', 'wpbit_add_rewrite_rules');Теперь URL site.ru/products/color/red/ будет корректно обрабатываться.
Использование параметра в запросе
Чтобы фильтровать записи по цвету, допишем в pre_get_posts:
function wpbit_filter_products_by_color($query) {
if (!is_admin() && $query->is_main_query() && $query->get('post_type') === 'product' && $color = $query->get('color')) {
$meta_query = [
[
'key' => 'color',
'value' => $color,
'compare' => '=',
]
];
$query->set('meta_query', $meta_query);
}
}
add_action('pre_get_posts', 'wpbit_filter_products_by_color');Полезные плагины для работы с rewrite API
Хотя мы не используем плагины для изменения URL, есть инструменты, которые помогают анализировать и отлаживать правила перезаписи:
- Clearfy Pro — оптимизация и управление функционалом, включая работу с URL.
- WPRemark — улучшает SEO, частично работает с URL.
Используйте их для комплексной оптимизации и диагностики, но основной контроль оставляйте в коде.
Заключение по изменению структуры URL вручную
Изменение структуры URL в WordPress без плагинов — мощный инструмент для разработчиков. Вы получаете полный контроль над отображением адресов и поведением сайта. Главное — правильно работать с rewrite API, добавлять свои правила и параметры, а также аккуратно сбрасывать правила перезаписи.
Применяя описанные методы, вы сможете создавать уникальные URL под задачи проекта, улучшать SEO и пользовательский опыт без лишних зависимостей.