Задача: почему и когда нужно автоматизировать обновление цен в WooCommerce
В крупных интернет-магазинах цены на товары часто меняются — будь то акции, сезонные скидки или корректировки цен от поставщиков. Ручное обновление цен через админку занимает много времени и чревато ошибками. Автоматизация обновления цен по расписанию позволяет экономить время, избегать человеческого фактора и оперативно реагировать на изменения.
Диагностика: как понять, что текущий способ обновления цен неэффективен
- Обновление цен занимает более 30 минут и требует участия нескольких сотрудников.
- Часто встречаются ошибки в ценах: неправильные значения, пропущенные товары.
- Невозможность быстро запустить распродажу или изменить цены на все товары одновременно.
- Отсутствует интеграция с поставщиками, которые предоставляют цены в CSV или API.
Пошаговое решение: автоматизация обновления цен через WP-Cron и пользовательский скрипт
1. Создаем пользовательскую функцию для обновления цен
В файле functions.php вашей темы или в кастомном плагине добавляем функцию, которая будет обновлять цены товаров. В примере ниже цены обновляются для всех товаров, умножая текущую цену на коэффициент из параметра.
function wpb_update_product_prices() {
$multiplier = 1.1; // Например, увеличить цены на 10%
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'fields' => 'ids'
];
$products = get_posts($args);
foreach ($products as $product_id) {
$product = wc_get_product($product_id);
if ($product) {
$regular_price = $product->get_regular_price();
if ($regular_price) {
$new_price = round(floatval($regular_price) * $multiplier, 2);
$product->set_regular_price($new_price);
$product->save();
}
}
}
}2. Регистрируем событие WP-Cron для запуска обновления по расписанию
Добавим задачу, которая будет запускать функцию ежедневно. Сначала регистрируем хук, затем планируем событие.
add_action('wpb_daily_price_update_event', 'wpb_update_product_prices');
function wpb_schedule_daily_price_update() {
if (!wp_next_scheduled('wpb_daily_price_update_event')) {
wp_schedule_event(time(), 'daily', 'wpb_daily_price_update_event');
}
}
add_action('wp', 'wpb_schedule_daily_price_update');3. Принудительный запуск для теста
Для проверки можно вызвать функцию вручную:
add_action('admin_init', function() {
if (isset($_GET['run_price_update']) && current_user_can('manage_options')) {
wpb_update_product_prices();
wp_die('Цены обновлены');
}
});После добавления этого кода, перейдите в админку по адресу https://ваш-сайт/wp-admin/?run_price_update=1 для запуска обновления вручную.
Проверка результата после внедрения
- Откройте любой товар в WooCommerce и проверьте, что цена изменилась согласно формуле.
- Воспользуйтесь плагином WP Crontrol для просмотра запланированных событий и убедитесь, что событие
wpb_daily_price_update_eventзапланировано. - Проверьте логи сервера на наличие ошибок выполнения кода.
Частые ошибки и как их исправить
- Функция не обновляет цены: убедитесь, что используете актуальные функции WooCommerce и что цены заданы в поле regular_price.
- Событие WP-Cron не запускается: WP-Cron зависит от посещений сайта. Для точного расписания настройте системный cron на сервере или используйте плагин WP Crontrol.
- Права доступа: функция для ручного запуска защищена проверкой
current_user_can('manage_options'), убедитесь, что вы администратор. - Производительность: при большом количестве товаров используйте пакетную обработку (пагинацию).
Практические советы по производительности и безопасности
- Реализуйте пакетную обработку товаров: например, обрабатывайте по 100 товаров за вызов, чтобы избежать тайм-аутов.
- Используйте транзиенты или метки времени: чтобы отслеживать дату последнего обновления и избежать лишних операций.
- Защитите ручные вызовы функций: проверяйте nonce и права пользователя.
- Тестируйте на staging-сервере: перед внедрением в продакшен.
Сравнение вариантов обновления цен: код vs плагины
| Вариант | Плюсы | Минусы |
|---|---|---|
| Код на PHP с WP-Cron | Полный контроль, бесплатный, гибкий | Нужны знания PHP, риски ошибок, требует тестирования |
| Плагины (например, WooCommerce Bulk Editor) | Простота использования, готовые интерфейсы | Могут быть платными, ограниченная кастомизация |
| Интеграция с внешним ERP/CRM | Автоматизация с учетом бизнес-процессов | Сложная настройка, требует API и поддержки |