Урок 1.1. Архітектура і таблиці

Мета

Бачити WooCommerce як систему: що зберігається в постах, що в окремих таблицях і хто цим керує.

Ключові поняття

  • WC() — головний об'єкт плагіна: WC()->cart, WC()->session, WC()->customer, WC()->mailer()
  • Товари — пости типу product і product_variation + таблиця wc_product_meta_lookup для швидких фільтрів
  • Замовлення — HPOS-таблиці wc_orders, wc_order_addresses, wc_order_operational_data, wc_orders_meta
  • Кошик гостя — у woocommerce_sessions, а не в cookie
  • Фонові задачі — таблиці Action Scheduler (actionscheduler_actions, actionscheduler_logs)
  • Атрибути — таксономії pa_*, категорії — product_cat, видимість — таксономія product_visibility

Схема

MERMAID
erDiagram
  wp_posts ||--o{ wp_postmeta : "product / product_variation"
  wp_posts ||--|| wc_product_meta_lookup : "ціна, залишок, SKU"
  wc_orders ||--o{ wc_order_addresses : "billing / shipping"
  wc_orders ||--|| wc_order_operational_data : "службові дані"
  wc_orders ||--o{ wc_orders_meta : "мета замовлення"
  wc_orders ||--o{ woocommerce_order_items : "позиції"
  woocommerce_order_items ||--o{ woocommerce_order_itemmeta : "кількість, сума, product_id"
  woocommerce_sessions }o--|| wc_orders : "кошик → checkout"

Код

Подивитися таблиці WooCommerce у своїй базі:

SQL
SHOW TABLES LIKE '%wc\_%';
SHOW TABLES LIKE '%woocommerce\_%';
SHOW TABLES LIKE '%actionscheduler\_%';

Типові помилки

СимптомПричинаВиправлення
Фільтр за ціною дуже повільнийmeta_query по _price у wp_postmetaФільтрувати через wc_get_products() / lookup-таблицю
Замовлення «не знайдено» через get_post()Увімкнений HPOS: замовлень немає в wp_postswc_get_order( $id )
База росте без причиниСтарі сесії та логи Action SchedulerПеревірити очищення сесій і retention логів

Слабка і сильна відповідь

Питання: Де WooCommerce зберігає замовлення?

Слабка відповідь. У wp_posts з типом shop_order, а дані — у wp_postmeta.

Сильна відповідь. Залежить від налаштування. На нових сайтах з 8.2 — в HPOS-таблицях (wc_orders і пов'язані). На старих може бути wp_posts або режим синхронізації. Тому в коді я ніколи не звертаюсь до таблиць напряму, лише через wc_get_order() і CRUD.

Чому друга сильніша: Кандидат знає поточний стан, пам'ятає про обидва сховища і робить висновок для коду.

Практичне завдання

Відкрийте базу тестового магазину. Знайдіть одне замовлення в wc_orders, його адреси в wc_order_addresses і позиції в woocommerce_order_items. Намалюйте схему цих зв'язків від руки або в Mermaid. У терміналі нижче спробуйте команди wp wc для перегляду даних.

wp — Модуль 1. WooCommerce як система

Питання з інтерв'ю

Денормалізована таблиця з ціною, залишком, SKU, рейтингом товару. WooCommerce використовує її для сортування і фільтрів, щоб не робити повільні JOIN по wp_postmeta.

У таблиці woocommerce_sessions. У cookie лежить лише ключ сесії. Для залогіненого користувача кошик додатково зберігається в user meta, щоб відновитися на іншому пристрої.

WP-Cron залежить від відвідувань і не має статусів та повторів. Action Scheduler зберігає задачі в БД, виконує їх пачками, логує помилки. На ньому працюють webhooks, аналітика, частина емейлів і міграції.

Save your progress

Sign in or create a free account to mark lessons as completed and continue the whole course. You will come back to this lesson.