WooCommerce: автоматическое изменение названия и слага товара по условию

Диагностика задачи: зачем менять название и слаг товара автоматически

В WooCommerce иногда возникает необходимость динамически менять название товара и его URL-адрес (слаг) в зависимости от определённых условий — например, добавлять пометки для распродаж, акций, сезонных предложений или региональных особенностей. Стандартными средствами WooCommerce и WordPress это не реализуется, а ручное редактирование неудобно и ошибочно при большом каталоге.

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

Как реализовать автоматическое изменение названия и слага товара в WooCommerce

Основные хуки для изменения данных товара

Для изменения названия и слага удобно использовать хук save_post_product, который срабатывает при сохранении товара. Это позволяет динамически модифицировать поля перед сохранением в базу.

Пример кода для изменения названия и слага при определённом условии

add_action('save_post_product', 'wpmanager_change_product_title_and_slug', 20, 3);
function wpmanager_change_product_title_and_slug($post_ID, $post, $update) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // Проверяем права пользователя
    if (!current_user_can('edit_post', $post_ID)) {
        return;
    }

    // Получаем объект товара
    $product = wc_get_product($post_ID);
    if (!$product) {
        return;
    }

    // Условие: если цена товара ниже 1000, добавляем пометку "- Акция" в название
    if ($product->get_price() < 1000) {
        $new_title = $post->post_title;
        if (strpos($new_title, ' - Акция') === false) {
            $new_title .= ' - Акция';
            // Обновляем заголовок и слаг
            $post_update = array(
                'ID' => $post_ID,
                'post_title' => $new_title,
                'post_name' => sanitize_title($new_title),
            );
            // Убираем хук, чтобы не было зацикливания
            remove_action('save_post_product', 'wpmanager_change_product_title_and_slug', 20);
            wp_update_post($post_update);
            // Восстанавливаем хук
            add_action('save_post_product', 'wpmanager_change_product_title_and_slug', 20, 3);
        }
    } else {
        // Если цена выше 1000 и в названии есть пометка, убираем её
        $old_title = $post->post_title;
        if (strpos($old_title, ' - Акция') !== false) {
            $new_title = str_replace(' - Акция', '', $old_title);
            $post_update = array(
                'ID' => $post_ID,
                'post_title' => $new_title,
                'post_name' => sanitize_title($new_title),
            );
            remove_action('save_post_product', 'wpmanager_change_product_title_and_slug', 20);
            wp_update_post($post_update);
            add_action('save_post_product', 'wpmanager_change_product_title_and_slug', 20, 3);
        }
    }
}

Объяснение кода

  • Используем save_post_product для перехвата сохранения товара.
  • Проверяем, чтобы не было автосохранения и чтобы пользователь имел права.
  • Получаем цену и проверяем условие, например, цена ниже 1000.
  • Если условие выполнено, добавляем к названию суффикс - Акция и обновляем post_title и post_name (слаг).
  • Предотвращаем рекурсию, временно удаляя хук перед обновлением и восстанавливая после.

Проверка результата после внедрения

1. Откройте любой товар в админке WooCommerce.

2. Измените цену товара на значение меньше 1000 и сохраните.

3. Проверьте, что в названии товара автоматически появился суффикс - Акция.

4. Проверьте URL товара — слаг должен совпадать с новым названием.

5. Измените цену обратно выше 1000 и сохраните — пометка должна исчезнуть.

Частые ошибки и способы их исправления

  • Рекурсия при обновлении поста: Если не отключить хук перед вызовом wp_update_post, будет зацикливание. Решение — использовать remove_action перед обновлением и add_action после.
  • Отсутствие проверки прав: Если не проверять права пользователя, может возникнуть ошибка при автоматическом сохранении. Используйте current_user_can('edit_post', $post_ID).
  • Не обновляется слаг: Обязательно обновляйте поле post_name вместе с post_title, применяя sanitize_title().
  • Автосохранение вызывает лишние обновления: Проверяйте константу DOING_AUTOSAVE и возвращайте управление, если она true.

Практические советы по безопасности и производительности

  • Избегайте тяжелых операций в хук save_post_product, так как он срабатывает при каждом сохранении товара.
  • Кэшируйте результаты, если условия проверки становятся сложными.
  • Для массового изменения большого каталога лучше использовать WP-CLI скрипты, чтобы не нагружать веб-сервер.
  • Следите за логами ошибок при отладке, чтобы вовремя обнаруживать проблемы с правами и рекурсией.

Сравнение вариантов реализации автоматического изменения названия и слага

ВариантПлюсыМинусыКогда использовать
Код на хуке save_post_productПолный контроль, не требует сторонних плагинов, гибкостьРиск рекурсии, нужен опыт, возможна нагрузка при массовом обновленииДля точечных условий и динамических изменений при сохранении
Плагин с настройками (например, автоматизация WooCommerce)Простота установки, UI для настройкиМенее гибко, может замедлять сайтДля пользователей без навыков программирования
Массовый импорт/экспорт CSV с изменениямиУдобно для одноразовых массовых измененийНе динамично, требует повторного импортаДля одноразовых корректировок большого каталога

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить дубликаты в циклических записях WordPress: практическое руководство
10.01.2026
Как автоматизировать управление меню в WordPress с помощью кода
14.01.2026
WooCommerce: автоматическое изменение вариативных цен товаров по условиям
08.06.2026
WooCommerce: установка и настройка отложенного отправления писем
13.05.2026
Как установить и настроить Clearfy Pro для оптимизации WordPress
12.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее