Проблема: необходимость регулярного обновления цен в WooCommerce
В интернет-магазинах на WooCommerce часто возникает задача автоматически менять цены товаров, например, по акциям, курсу валют или внутренним расчетам. Ручное обновление большого количества товаров неудобно и приводит к ошибкам. Встроенных средств для автоматического обновления цены по расписанию в WooCommerce нет, поэтому нужно настраивать кастомные решения.
Диагностика проблемы: почему цены не обновляются автоматически
Если у вас настроены скрипты для обновления цен, но они не работают, проверьте:
- Включен ли WP-Cron на сайте (проверка работы по расписанию).
- Правильно ли задана логика обновления цен (функция меняет значения в мета-полях '_price', '_regular_price' и '_sale_price').
- Отсутствуют ли ошибки PHP при выполнении скрипта.
- Не перезаписывают ли другие плагины/темы цены обратно.
Пошаговое решение: автоматическое обновление цены товара с помощью Cron и кастомной функции
1. Создаем функцию обновления цены товара
Ниже пример функции, которая увеличивает цену товара с ID 123 на 10%:
function wpmart_update_product_price() {
$product_id = 123; // ID товара
$product = wc_get_product($product_id);
if (!$product) {
error_log('Product not found: '.$product_id);
return;
}
$regular_price = floatval($product->get_regular_price());
$new_price = $regular_price * 1.10; // +10%
$product->set_regular_price($new_price);
$product->set_price($new_price);
$product->save();
error_log('Price updated for product ' . $product_id . ' to ' . $new_price);
}2. Регистрируем WP-Cron событие для запуска функции по расписанию
Добавляем планировщик, который будет запускать функцию ежедневно:
function wpmart_register_cron_event() {
if (!wp_next_scheduled('wpmart_daily_price_update')) {
wp_schedule_event(time(), 'daily', 'wpmart_daily_price_update');
}
}
add_action('wp', 'wpmart_register_cron_event');
add_action('wpmart_daily_price_update', 'wpmart_update_product_price');3. Очистка задачи при деактивации (чтобы не оставлять мусор)
function wpmart_deactivate_cron() {
$timestamp = wp_next_scheduled('wpmart_daily_price_update');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpmart_daily_price_update');
}
}
register_deactivation_hook(__FILE__, 'wpmart_deactivate_cron');Проверка результата
Чтобы удостовериться, что задача работает:
- Просмотрите лог ошибок PHP или включите
error_logи проверяйте появление сообщений «Price updated for product». - Зайдите в админку WooCommerce и проверьте цену товара вручную.
- Используйте плагин WP Crontrol для просмотра и запуска Cron задач вручную.
Частые ошибки и их исправление
- WP-Cron не срабатывает — проверьте, что на сайте есть трафик или настройте системный cron на сервере, чтобы запускать
wp-cron.phpрегулярно. - Цена не меняется — убедитесь, что функции
set_regular_priceиset_priceвызываются и вызывается$product->save(). Проверьте разрешения пользователя и наличие плагинов, которые могут переопределять цены. - Ошибка с ID товара — проверьте, что товар существует и ID указан верно.
Практические советы по безопасности и производительности
- Запускайте обновление цен не чаще раза в сутки, чтобы не нагружать сервер и базу.
- Логи ошибок выводите в файл, а не на экран.
- Если обновляете много товаров, разбивайте процесс на партии и используйте транзакции для целостности.
- При необходимости интеграции с внешними API по курсам валют используйте кэширование и проверку актуальности данных.
Пример расширения: обновление цен нескольких товаров
function wpmart_bulk_update_prices() {
$product_ids = [123, 456, 789];
foreach ($product_ids as $id) {
$product = wc_get_product($id);
if (!$product) continue;
$price = floatval($product->get_regular_price());
$new_price = $price * 0.95; // скидка 5%
$product->set_regular_price($new_price);
$product->set_price($new_price);
$product->save();
}
}Таблица сравнения вариантов автоматического обновления цены
| Метод | Плюсы | Минусы | Подходит для |
|---|---|---|---|
| WP-Cron + кастомный код | Гибкость, нет зависимостей от плагинов | Зависит от посещаемости сайта, требует навыков | Разработчики, индивидуальные задачи |
| Плагины автоматического обновления цен (например, WP All Import) | Простота настройки, поддержка импорта CSV, API | Платные, могут быть избыточны | Магазины с большим каталогом |
| Внешние сервисы и интеграции | Автоматическая синхронизация с поставщиками | Сложность настройки, стоимость | Сложные бизнесы, дропшиппинг |