В WordPress URL записей (постов) формируются на основе постоянных ссылок (Permalinks). Однако иногда возникает задача изменить URL постов автоматически по определённой маске — например, добавить префикс, суффикс или изменить структуру в зависимости от категории, даты или других метаданных. В этой статье разберём, как это сделать технически, используя фильтры WordPress и примеры плагинов, а также приведём рабочие примеры кода.
Почему стоит менять URL постов автоматически
Изменение URL может понадобиться для:
- Улучшения SEO за счёт добавления ключевых слов;
- Упрощения структуры ссылок для пользователей;
- Автоматизации миграции или реструктуризации сайта;
- Добавления бизнес-логики в структуру URL (например, регион, тип поста);
- Избежания конфликтов URL при большом количестве похожих записей.
Вручную менять URL для каждого поста неудобно и долго — автоматизация решает эту проблему.
Основные способы автоматического изменения URL постов
Использование фильтра post_link для кастомной генерации ссылок
WordPress предоставляет фильтр post_link, который позволяет изменить URL поста при формировании постоянной ссылки.
Пример функции, которая добавляет префикс news/ ко всем URL постов типа post:
function wpaddons_post_link_prefix($permalink, $post) {
if ($post->post_type == 'post') {
$permalink = home_url('/news/' . $post->post_name . '/');
}
return $permalink;
}
add_filter('post_link', 'wpaddons_post_link_prefix', 10, 2);
Такой код меняет ссылки в шаблонах, но чтобы WordPress корректно обрабатывал новые URL, нужно добавить правила перезаписи (rewrite rules).
Добавление правил перезаписи (Rewrite rules) для новых URL
Без корректных правил перезаписи при переходе по новым URL будет 404 ошибка. Пример добавления правил:
function wpaddons_add_rewrite_rules() {
add_rewrite_rule('^news/([^/]*)/?$', 'index.php?name=$matches[1]&post_type=post', 'top');
}
add_action('init', 'wpaddons_add_rewrite_rules');
После добавления этих правил нужно перейти в админке в "Настройки > Постоянные ссылки" и нажать «Сохранить изменения» без правок, чтобы обновить правила.
Автоматическое добавление суффикса к URL постов с определённой категорией
Допустим, нам нужно, чтобы URL всех постов в категории «Tutorial» заканчивались на «-guide».
function wpaddons_post_link_suffix($permalink, $post) {
if ($post->post_type != 'post') {
return $permalink;
}
$categories = get_the_category($post->ID);
foreach ($categories as $category) {
if ($category->slug == 'tutorial') {
$permalink = trailingslashit($permalink) . 'guide/';
break;
}
}
return $permalink;
}
add_filter('post_link', 'wpaddons_post_link_suffix', 10, 2);
function wpaddons_rewrite_rules_suffix() {
add_rewrite_rule('^([^/]+)/guide/?$', 'index.php?name=$matches[1]&post_type=post', 'top');
}
add_action('init', 'wpaddons_rewrite_rules_suffix');
Таким образом мы добавляем к URL постов из категории «tutorial» суффикс guide/ и настраиваем обработку этих URL.
Использование плагинов для настройки URL
Если не хочется писать собственный код, можно использовать плагины, которые облегчают настройку URL:
- Clearfy Pro — имеет функции для управления SEO и постоянными ссылками;
- WPRemark — для работы с комментариями и URL;
- Плагины типа Custom Permalinks или Permalink Manager (не из WPSHOP), которые дают гибкость в настройке URL.
Но для специфичных задач часто полезно использовать собственные фильтры и rewrite rules.
Практические советы и потенциальные проблемы
Обновление правил перезаписи
После внесения изменений в правила перезаписи всегда нужно обновлять их, чтобы сайт корректно обрабатывал новые URL. Это можно сделать программно или вручную через админку.
Влияние на SEO
Изменение URL влияет на SEO. Если меняете URL существующих постов, обязательно используйте 301 редиректы, чтобы сохранить позиции в поисковых системах. Для этого можно использовать плагин Redirection или прописать правила в .htaccess.
Уникальность URL
Автоматическая генерация URL должна учитывать конфликты и дубли. WordPress сам добавляет суффикс при совпадении, но лучше предусмотреть логику, чтобы минимизировать дубли.
Пример комплексного решения: автоматическое добавление префикса по типу поста
Допустим, у вас есть кастомный тип поста product, и вы хотите, чтобы все его URL начинались с shop/. Обеспечим это с помощью кода:
function wpaddons_product_post_link($permalink, $post) {
if ($post->post_type == 'product') {
$permalink = home_url('/shop/' . $post->post_name . '/');
}
return $permalink;
}
add_filter('post_type_link', 'wpaddons_product_post_link', 10, 2);
function wpaddons_rewrite_rules_product() {
add_rewrite_rule('^shop/([^/]*)/?$', 'index.php?product=$matches[1]', 'top');
}
add_action('init', 'wpaddons_rewrite_rules_product');
Не забудьте сбросить правила перезаписи.
Итоги
Автоматическое изменение URL постов в WordPress — мощный инструмент для гибкой настройки структуры ссылок. Использование фильтров post_link и post_type_link вместе с кастомными rewrite rules позволяет реализовать любые бизнес-задачи. При этом важно внимательно следить за SEO и корректностью правил, чтобы избежать ошибок 404 и потери трафика.
Для удобства можно дополнить функционал плагинами из WPSHOP, которые помогут оптимизировать работу с URL и SEO.