В WordPress URL (человекочитаемые постоянные ссылки) играют важную роль для SEO и удобства пользователей. Часто возникает задача программно изменить URL записей по определённому шаблону, например, добавить дату, категорию или уникальный идентификатор. В этой статье разберёмся, как автоматизировать изменение URL записей по шаблону, какие функции и хуки WordPress использовать и какие плагины помогут в этом.
Зачем автоматически изменять URL записей WordPress
Стандартный URL записи в WordPress обычно строится по шаблону: /post-name/. Но иногда необходимо:
- Добавить дату публикации в URL — для архивации и SEO.
- Включить в URL название категории или тега.
- Добавить уникальные идентификаторы, например, ID записи или метаполе.
- Изменять URL массово, если изменились требования к структуре сайта.
Ручное изменение URL для большого количества записей неудобно и рискованно. Автоматизация позволяет управлять структурой ссылок централизованно и безопасно.
Основные хуки и функции для изменения URL записей
В WordPress для управления URL нужно работать с пермалинками и фильтрами, которые формируют ссылки:
post_link— фильтр для изменения ссылки на отдельную запись.pre_post_link— фильтр, который позволяет изменить структуру ссылки перед её генерацией.register_post_type— при регистрации типа записи можно задать шаблон URL.
Для изменения URL программно используйте фильтр wplike_post_link, а также можно пересохранять правила пермалинков.
Пример: добавление даты публикации в URL записи
Добавим в URL запись дату в формате /год/месяц/день/название-записи/ с помощью фильтра post_link:
add_filter('post_link', 'wplike_post_link', 10, 3);
function wplike_post_link($permalink, $post, $leavename) {
if ($post->post_type != 'post') {
return $permalink;
}
$date = get_the_date('Y/m/d', $post);
$slug = $leavename ? '%postname%' : $post->post_name;
$new_permalink = home_url("/" . $date . "/" . $slug . "/");
return $new_permalink;
}После добавления этого кода нужно перейти в админке WordPress в Настройки > Постоянные ссылки и нажать "Сохранить изменения" для обновления правил.
Учёт категорий и метаполей в URL
Чтобы добавить в URL название категории или значение метаполя, нужно получить эти данные из записи.
add_filter('post_link', 'wplike_post_link_category_meta', 10, 3);
function wplike_post_link_category_meta($permalink, $post, $leavename) {
if ($post->post_type != 'post') return $permalink;
$categories = get_the_category($post->ID);
$category_slug = '';
if (!empty($categories)) {
$category_slug = $categories[0]->slug;
}
$custom_meta = get_post_meta($post->ID, 'wplike_custom_slug', true);
$slug_part = $custom_meta ? $custom_meta : ($leavename ? '%postname%' : $post->post_name);
$new_permalink = home_url("/" . $category_slug . "/" . $slug_part . "/");
return $new_permalink;
}Этот пример покажет URL вида /category-slug/custom-slug/ или /category-slug/post-name/ при отсутствии метаполя.
Автоматическое массовое обновление URL записей
Если нужно изменить структуру URL для большого количества записей, достаточно написать скрипт, который обновит слаг (post_name) с учётом новых правил, а затем обновит пермалинки.
Пример функции для массового обновления слагов с добавлением префикса:
function wplike_update_all_post_slugs() {
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'publish',
];
$posts = get_posts($args);
foreach ($posts as $post) {
$new_slug = 'wplike-' . $post->post_name;
wp_update_post([
'ID' => $post->ID,
'post_name' => $new_slug
]);
}
flush_rewrite_rules();
}<Вызовите эту функцию один раз через админку или WP-CLI. После обновления URL не забудьте проверить, что старые ссылки корректно редиректятся, чтобы избежать потери трафика.
Плагины для удобного управления URL и пермалинками
Иногда проще использовать готовые решения для изменения URL:
- Clearfy Pro — расширенные настройки SEO, включая гибкое управление URL.
- ABC Pagination — полезен для правильной пагинации и структуры URL в архивах.
- Permalink Manager Lite — популярный плагин для точечного изменения URL записей и таксономий.
Использование таких плагинов экономит время и снижает риск ошибок при изменении URL, особенно если вы не хотите глубоко погружаться в код.
Обработка редиректов при изменении URL
Изменение структуры URL повлечёт за собой, что старые ссылки перестанут работать. Чтобы избежать 404 ошибок и потери SEO, нужно настроить редиректы.
Пример кода для редиректа старых URL на новые с добавлением префикса:
add_action('template_redirect', 'wplike_redirect_old_urls');
function wplike_redirect_old_urls() {
if (is_singular('post')) {
global $post;
$current_slug = $post->post_name;
if (strpos($current_slug, 'wplike-') !== 0) {
$new_slug = 'wplike-' . $current_slug;
wp_redirect(home_url('/' . $new_slug . '/'), 301);
exit;
}
}
}Этот код проверит, если в URL отсутствует нужный префикс, и сделает редирект на правильный.
Заключение
Автоматическое изменение URL записей WordPress по шаблону — мощный инструмент для оптимизации структуры сайта. Используя фильтры post_link, функции для массового обновления слагов и грамотные редиректы, можно гибко управлять постоянными ссылками без риска сломать сайт. Для удобства и безопасности рекомендуем комбинировать кодовые решения с проверенными плагинами, например, Clearfy Pro.