Как изменить автоматический slug в WordPress: практические решения и примеры кода

Slug — это часть URL, которая формируется из заголовка записи, страницы или таксономии и служит для удобочитаемого и SEO-дружественного адреса. По умолчанию WordPress генерирует slug автоматически, преобразуя заголовок: пробелы замещаются дефисами, а кириллические символы транслитерируются. Однако в ряде случаев автоформирование slug не подходит, и возникает необходимость его изменить программно или при создании записи.

Почему важно контролировать slug в WordPress

Правильно настроенный slug повышает SEO-эффективность сайта и улучшает восприятие URL пользователями. Иногда нужно сделать slug короче, добавить уникальные идентификаторы, убрать лишние слова или полностью задать свой вариант. Автоматический slug может содержать стоп-слова, повторяться или некорректно транслитерироваться, особенно при мульти-язычном сайте.

Кроме того, при импорте или массовом создании записей важно иметь возможность переопределять slug программно.

Как изменить slug при сохранении записи

Для изменения slug во время сохранения записи можно использовать хук save_post. Ниже пример функции wpsnippets_change_post_slug, которая заменяет slug на значение из метаполя custom_slug или формирует его по своим правилам:

function wpsnippets_change_post_slug($post_id) {
    // Проверяем тип записи
    if (get_post_type($post_id) !== 'post') return;

    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Получаем кастомный слаг из метаполя
    $custom_slug = get_post_meta($post_id, 'custom_slug', true);

    if ($custom_slug) {
        // Очищаем и приводим slug к нужному формату
        $new_slug = sanitize_title($custom_slug);

        // Проверяем, что slug не пустой
        if (!empty($new_slug)) {
            // Обновляем слаг записи
            remove_action('save_post', 'wpsnippets_change_post_slug');
            wp_update_post(array(
                'ID' => $post_id,
                'post_name' => $new_slug
            ));
            add_action('save_post', 'wpsnippets_change_post_slug');
        }
    }
}
add_action('save_post', 'wpsnippets_change_post_slug');

В этом примере вы можете вручную добавить метаполе custom_slug в админке или программно, и при сохранении записи slug заменится на его значение. Такой подход удобен для тонкой настройки URL без плагинов.

Как изменить slug для таксономий и пользовательских типов записей

Для таксономий или кастомных типов постов slug также можно менять программно при сохранении. Пример для изменения slug термина таксономии:

function wpsnippets_change_term_slug($term_id, $tt_id, $taxonomy) {
    if ($taxonomy !== 'category') return;

    $term = get_term($term_id, $taxonomy);
    if (!$term || is_wp_error($term)) return;

    // Создаем новый slug, например, с префиксом
    $new_slug = 'cat-' . sanitize_title($term->name);

    if ($term->slug !== $new_slug) {
        wp_update_term($term_id, $taxonomy, array('slug' => $new_slug));
    }
}
add_action('created_term', 'wpsnippets_change_term_slug', 10, 3);
add_action('edited_term', 'wpsnippets_change_term_slug', 10, 3);

Этот код добавляет префикс cat- ко всем категориям. По аналогии можно адаптировать для любых таксономий и пользовательских типов.

Использование плагинов для управления slug

Если хочется более гибко управлять slug без написания кода, можно использовать плагины. Например:

  • Clearfy Pro — оптимизатор и инструмент для SEO, включая настройку URL;
  • WPRemark — плагин для управления метаданными и улучшения структуры ссылок;
  • Classic Editor + Yoast SEO — для ручной правки slug при создании записи с подсказками SEO.

Но если вам нужны уникальные правила формирования slug, лучше сделать это через кастомный код, как показано выше.

Как избежать дублирующихся slug и ошибок

WordPress не позволяет двум записям иметь одинаковый slug в рамках одного типа записи, он автоматически добавляет суффиксы -2, -3 и т.д. Для предотвращения подобных ситуаций в wpsnippets_change_post_slug можно добавить проверку уникальности:

function wpsnippets_generate_unique_slug($slug, $post_id) {
    $args = array(
        'name' => $slug,
        'post_type' => 'post',
        'post_status' => 'any',
        'posts_per_page' => 1,
        'fields' => 'ids',
        'exclude' => array($post_id),
    );
    $posts = get_posts($args);
    if ($posts) {
        $slug .= '-' . uniqid();
    }
    return $slug;
}

Вызовите эту функцию перед обновлением slug, чтобы гарантировать уникальность и избежать конфликтов.

Выводы и рекомендации

Изменение slug — важный аспект управления структурой сайта и SEO. Программное управление slug даёт гибкость и автоматизацию, особенно полезно при импорте или массовом создании контента. Используйте хук save_post для постов и created_term / edited_term для таксономий, чтобы реализовать свои правила.

Плагины из репозитория WPSHOP помогут, если хотите упростить задачу, но для нестандартных требований лучше писать кастомные решения.

WooCommerce: как отключить удаление заказа после изменения заказа программно
02.06.2026
Как автоматизировать удаление старых записей в WordPress через PHP CLI
10.03.2026
Автоматическое удаление комментариев из черного списка по IP в WordPress
31.01.2026
Как удалить или изменить правила перезаписи (rewrite rules) в WordPress
03.12.2025
Как изменить автоматический slug в WordPress: практические решения и примеры кода
29.12.2025