Что такое HPOS и что с ним происходит
HPOS — это High-Performance Order Storage, раньше называвшееся Custom Order Tables: отдельные таблицы для заказов вместо хранения их в таблицах записей WordPress. Основные таблицы: _wc_orders, _wc_order_addresses, _wc_order_operational_data и _wc_orders_meta, все с префиксом вашей базы данных. Существующие магазины на новое хранилище сами не переключаются.
| Версия WooCommerce | Дата | Статус HPOS |
|---|---|---|
| 7.1 | 8 ноября 2022 | Впервые появился за флагом функции, по умолчанию выключен |
| 8.2 | 10 октября 2023 | Объявлен стабильным; для новых установок включён по умолчанию |
Данные таблицы взяты из заметок выпусков на сайте разработчиков WooCommerce. Если ваш магазин старше версии 8.2, заказы у вас лежат в прежнем хранилище, которое в настройках называется «WordPress posts storage (legacy)». Общую картину работы магазина см. в статье про WordPress и WooCommerce.
Нужно ли переходить прямо сейчас
Срочности нет: официального объявления о том, что прежнее хранилище устарело, и даты его отключения нет ни в одном документе WooCommerce. Документация разработчиков не называет его устаревшим. Любые сроки из сторонних блогов не подтверждены первоисточником, поэтому ориентироваться на них не стоит.
Решение принимайте по своей ситуации: переход имеет смысл, если вы планируете новые расширения, рассчитанные на HPOS, или готовитесь к росту числа заказов. Если магазин стабилен и расширения не заявили совместимость, можно подождать. Вопросы скорости самого магазина разобраны в статье про оптимизацию WooCommerce.
Резервная копия до перехода
Перед переходом сделайте полную копию базы данных и файлов и проверьте, что её можно развернуть. Переход меняет, где лежат заказы, а команда очистки потом удаляет заказы из старых таблиц. Без копии вернуть эти данные нечем.
Минимум — выгрузка базы командой WP-CLI или mysqldump и копия каталога сайта. Настройку регулярных копий разбирает статья про резервное копирование WordPress.
wp db export /root/backup/before-hpos.sql
mysqldump --single-transaction -u dbuser -p dbname > /root/backup/before-hpos-dump.sql
ls -lh /root/backup/Ещё лучше сначала повторить весь переход на копии сайта: так вы увидите, какие расширения мешают, не рискуя живыми заказами.
Проверка расширений
Каждый активный плагин должен заявить совместимость с HPOS; один несовместимый блокирует выбор нового хранилища в настройках. По данным WooCommerce, расширения с WooCommerce.com совместимы, но на вашу дату публикации это стоит перепроверить. Сторонние и самописные плагины проверяйте сами.
Совместимость плагин заявляет на хуке before_woocommerce_init. Кроме того, код не должен читать и писать заказы напрямую через wp_posts и wp_postmeta: для этого есть wc_get_order() и методы объекта заказа. Иначе, как предупреждает документация, можно прочитать устаревший заказ или записать заказ, который никто не прочтёт.
use Automattic\WooCommerce\Utilities\FeaturesUtil;
add_action( 'before_woocommerce_init', function () {
if ( class_exists( FeaturesUtil::class ) ) {
FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
} );Порядок перехода в админке
Переход делается в два шага: сначала включается режим совместимости и заказы копируются в новые таблицы, и только потом новое хранилище выбирается основным. Путь в админке: WooCommerce → Settings → Advanced → Features. Названия пунктов даны по английскому интерфейсу.
- Сделайте и проверьте резервную копию.
- Отметьте «Enable compatibility mode (synchronizes orders to the posts table)» и сохраните настройки.
- Дождитесь фонового переноса. Заказы переносятся порциями по 25 за действие; ход виден в WooCommerce → Status → Scheduled Actions.
- Когда перенос завершён, в блоке «Order data storage» выберите High-Performance Order Storage.
- Несколько дней проверяйте магазин: оформление заказа, письма, отчёты, интеграции.
То же самое через WP-CLI
На больших магазинах удобнее вести перенос из командной строки: так видно прогресс и ошибки. Для HPOS есть пространство команд wp wc hpos; старое wp wc cot помечено как устаревшее, хотя на некоторых страницах документации ещё встречается.
wp wc hpos status
wp wc hpos sync
wp wc hpos verify_data
wp wc hpos --helpКоманды status, sync, verify_data, cleanup, backfill и enable перечислены в документации. Флаги каждой команды я не проверял, поэтому смотрите wp wc hpos --help на своём сервере. Команда cleanup удаляет данные заказов из прежних таблиц, поэтому запускайте её только после резервной копии и долгой проверки.
Режим совместимости: польза и цена
Режим совместимости держит заказы синхронными в обеих схемах, и поэтому откат на таблицы записей мгновенный. Документация советует не выключать его сразу, а подержать включённым некоторое время. Цена в том, что данные пишутся дважды.
Из этого следуют две вещи, которые документация прямо не формулирует: растёт нагрузка на запись и увеличивается размер базы. Следите за размером таблиц и за скоростью оформления заказа; приёмы чистки базы описаны в статье про оптимизацию базы данных WordPress.
Когда вы уверены, что всё работает, режим совместимости выключают. После этого откат на старые таблицы уже не сводится к одному переключателю.
Частые вопросы
Включится ли HPOS сам при обновлении WooCommerce?
Нет. Для новых установок с версии 8.2 он включён по умолчанию, а существующие магазины остаются на прежнем хранилище, пока вы сами не переключитесь.
Можно ли вернуться назад?
Да, пока включён режим совместимости: возврат на таблицы записей в документации назван мгновенным. После очистки старых таблиц рассчитывайте только на резервную копию.
Когда отключат старое хранилище?
Официальной даты нет, как нет и заявления, что оно устарело. Если где-то встретите конкретный срок, ищите его в документации WooCommerce, а не в пересказах.
Что делать клиентам ZevsHost?
На общем хостинге резервные копии и доступ к базе обеспечивает панель: сделайте копию через неё и проведите переход в админке WooCommerce. На VPS и выделенном сервере копии, WP-CLI и проверку расширений ведёте вы сами.