Диагностика проблем с переводами в WooCommerce и кэшированием
На многоязычных сайтах WooCommerce часто возникают проблемы с тем, что переводы не обновляются или отображаются некорректно после изменений. Обычно это связано с кэшированием на уровне WordPress, сервера или плагинов кэширования, а также с особенностями работы плагинов перевода (WPML, Polylang и др.).
Чтобы диагностировать проблему, выполните следующие шаги:
- Очистите браузерный кэш и попробуйте открыть страницу в режиме инкогнито.
- Отключите временно все кэширующие плагины (например, WP Super Cache, W3 Total Cache, LiteSpeed Cache).
- Проверьте, не используется ли серверное кэширование (например, Varnish, NGINX FastCGI кеш) и отключите его на время теста.
- Проверьте, что в настройках WooCommerce и плагина перевода правильно указана локаль и язык товара.
- Включите логирование ошибок PHP и WP_DEBUG для выявления проблем.
Пошаговое решение проблемы некорректных переводов из-за кэша
1. Очистка кэша WordPress и плагинов
Для очистки кэша используйте стандартные методы:
if (function_exists('wp_cache_clear_cache')) {
wp_cache_clear_cache();
}
// Для W3 Total Cache
if (function_exists('w3tc_flush_all')) {
w3tc_flush_all();
}Если используете LiteSpeed Cache, очистите кэш через панель администратора или вызовите:
do_action('litespeed_purge_all');2. Отключение object cache во время отладки
Object cache может сохранять устаревшие данные перевода. В wp-config.php временно отключите:
define('WP_CACHE', false);После проверки не забудьте вернуть обратно.
3. Правильная интеграция с переводчиками (WPML, Polylang)
Убедитесь, что для товаров WooCommerce правильно настроены языковые параметры. Например, для WPML:
- Проверьте, что товары связаны между языками.
- Используйте функцию
icl_object_id()для получения ID товара на текущем языке.
Пример правильного вызова товара на текущем языке:
$product_id = icl_object_id($original_product_id, 'product', false, ICL_LANGUAGE_CODE);
$product = wc_get_product($product_id);4. Очистка транзиентов WooCommerce
WooCommerce активно использует транзиенты для кэширования данных. Очистка их может помочь:
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_wc_%'");Проверка результата после внедрения
После выполнения очистки кэша и проверки настроек:
- Откройте страницу товара на разных языках — переводы должны обновиться.
- Измените перевод товара и проверьте, что изменения сразу видны без кеширования.
- Проверьте работу сайта в режиме инкогнито и с отключёнными кэшами браузера.
- Убедитесь, что нет ошибок в логах PHP и WordPress.
Частые ошибки и как их исправить
- Ошибка: Переводы не обновляются даже после очистки кэша.
Причина: Серверное кэширование или CDN (Cloudflare и др.) не очищены.
Решение: Очистите кэш на сервере и CDN, либо временно отключите CDN для проверки. - Ошибка: Неправильные ID товаров для языка в коде.
Причина: Использование оригинального ID без преобразования через WPML/Polylang.
Решение: Используйте функцииicl_object_id()илиpll_get_post()для получения правильного ID. - Ошибка: Плагины кэширования конфликтуют с WooCommerce.
Причина: Неправильные настройки исключений кэширования.
Решение: В настройках плагина кэширования исключите из кэша страницы корзины, оформления заказа, личного кабинета.
Практические советы по безопасности и производительности
- При использовании кэширования исключайте из него динамические страницы WooCommerce.
- Используйте объектное кэширование (Redis, Memcached) с корректной настройкой TTL для транзиентов.
- Регулярно очищайте устаревшие транзиенты через WP-CLI команду:
wp transient delete --expired. - Для сайтов с большим трафиком рекомендуем использовать специализированные плагина для кэширования WooCommerce, например, Clearfy Pro, который помогает оптимизировать кэш и удалить дубли страниц.
Сравнение способов очистки кэша для WooCommerce и переводов
| Метод | Применимость | Плюсы | Минусы |
|---|---|---|---|
| Очистка кэша плагинов (W3TC, LiteSpeed) | Для большинства сайтов | Быстрое решение, простота | Может не затронуть серверный кэш |
| Удаление транзиентов через SQL | Для устранения проблем с кэшированием данных WooCommerce | Глубокая очистка, решает проблемы с устаревшими данными | Требует осторожности, возможны ошибки при некорректном запросе |
| Отключение object cache | Для локальной отладки | Убирает источник проблем с транзиентами | Снижает производительность при длительном использовании |