Диагностика проблемы: зачем нужно автоматическое обновление цен
В интернет-магазинах на WooCommerce часто возникает необходимость периодически менять цены на товары — например, для акций, сезонных скидок или корректировки себестоимости. Вручную обновлять цены неудобно и рискованно, особенно если товаров много. Автоматизация этого процесса помогает экономить время и избежать ошибок.
Как настроить автоматическое обновление стоимости товаров по расписанию
1. Используем WP-Cron для запуска задачи
WordPress имеет встроенный планировщик задач WP-Cron, который позволяет запускать функции по расписанию. Для обновления цен нужно создать собственную функцию и привязать её к событию WP-Cron.
function wpaddons_update_product_prices() {
// Получаем все товары, которые нужно обновить
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
];
$products = get_posts($args);
foreach ($products as $product_post) {
$product = wc_get_product($product_post->ID);
if (!$product) continue;
// Пример логики обновления цены: увеличить цену на 10%
$old_price = $product->get_regular_price();
$new_price = $old_price * 1.1;
// Обновляем цену
$product->set_regular_price($new_price);
$product->save();
}
}
// Регистрируем событие, если оно не зарегистрировано
if (!wp_next_scheduled('wpaddons_update_prices_hook')) {
wp_schedule_event(time(), 'daily', 'wpaddons_update_prices_hook');
}
add_action('wpaddons_update_prices_hook', 'wpaddons_update_product_prices');2. Создаем и регистрируем собственный интервал (если нужен нестандартный)
Если требуется запускать обновление, например, раз в 6 часов, добавьте кастомный интервал:
add_filter('cron_schedules', function($schedules) {
$schedules['every_six_hours'] = [
'interval' => 6 * 3600,
'display' => __('Каждые 6 часов')
];
return $schedules;
});
if (!wp_next_scheduled('wpaddons_update_prices_hook')) {
wp_schedule_event(time(), 'every_six_hours', 'wpaddons_update_prices_hook');
}Как проверить, что автоматическое обновление цен работает
- Проверить наличие запланированного события:
wp cron event list(через WP-CLI) - Добавить логирование в функцию обновления цен:
и посмотреть error_log сервераerror_log('Обновление цены для товара ID: ' . $product->get_id()); - Проверить фактическое изменение цены в админке WooCommerce или на сайте
- Вручную запустить событие через WP-CLI:
wp cron event run wpaddons_update_prices_hook
Частые ошибки и как их исправить
- Событие WP-Cron не запускается
Причина: на сайте низкая посещаемость или отключен WP-Cron. Решение: настроить системный cron на вызовwp-cron.phpили использовать плагин «WP Crontrol» для управления задачами. - Цены не обновляются
Причина: неправильное получение или обновление товаров. Проверьте, чтоwc_get_product()возвращает объект, и вызываетсяsave()после обновления цены. - Ошибки в логах
Причина: PHP ошибки в функции. Используйте отладчик или error_log для диагностики.
Практические советы по безопасности и производительности
- Добавляйте в функцию проверки прав пользователя, если запускаете вручную.
- Используйте пагинацию при большом количестве товаров, чтобы избежать превышения лимитов памяти и времени выполнения.
- Кэшируйте результаты, если используете сложные запросы для отбора товаров.
- Проверяйте, что цена не становится отрицательной или некорректной после обновления.
Сравнение вариантов автоматизации обновления цен
| Метод | Преимущества | Недостатки | Рекомендации |
|---|---|---|---|
| WP-Cron + пользовательская функция | Полный контроль, без сторонних плагинов | Зависит от посещаемости сайта, требует навыков PHP | Подходит для разработчиков, которые хотят кастомное решение |
| Плагины для массового обновления цен | Простота настройки, GUI | Менее гибкие, могут быть платными | Хорошо для пользователей без навыков программирования |
| Внешние скрипты и API | Автоматизация из внешних систем, гибкость | Сложность настройки, требует защиты API | Используется для интеграций с ERP и CRM |