Що таке 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 та перевірку розширень ведете ви самі.