WooCommerce · Arhitectură WooCommerce
WooCommerce: repararea extensiilor incompatibile cu HPOS
O extensie sau un cod propriu care citește comenzile direct din tabelele de postări nu mai vede datele corecte sub HPOS. Se repară cu API-ul WooCommerce.
- Declarația de compatibilitate
- wc_get_order
- Metadate prin obiect
- OrderUtil
- Fără acces direct la tabele
Răspuns în aceeași zi lucrătoare Ofertă fixă Fără parole
Răspuns rapid
Ghidul oficial (recipe book): declari compatibilitatea în fișierul principal al pluginului, în before_woocommerce_init, cu \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', __FILE__, true), protejat cu class_exists; înlocuiești get_post() cu wc_get_order(), iar get_post_meta/update_post_meta cu $order->get_meta/update_meta_data/add_meta_data/delete_meta_data urmate de $order->save(); detectezi stocarea cu OrderUtil::custom_orders_table_usage_is_enabled(); verifici tipul cu OrderUtil::get_order_type() și is_order(); pentru meta boxuri folosești ecranul wc_get_page_screen_id('shop-order') când HPOS e activ; eviți accesul direct la tabele, care poate citi comenzi învechite.
Ce ai nevoie
- Codul extensiei sau al snippet-urilor
- Un mediu de test cu HPOS activ
- Cunoștințe PHP
- Contactul dezvoltatorului extensiei, dacă e terță
Pașii, pe rând
- 1Identifică extensia vinovatăPagina Funcții din WooCommerce indică extensiile incompatibile. Pentru cod propriu, caută get_post_meta, update_post_meta, wpdb și interogări pe posts pentru shop_order.
- 2Cere o versiune compatibilăPentru extensii terțe, verifică changelog-ul și contactează dezvoltatorul. Reparațiile în codul altora se pierd la actualizare.
- 3Declară compatibilitatea (doar după adaptare)În before_woocommerce_init, cu FeaturesUtil::declare_compatibility('custom_order_tables', __FILE__, true). Declarația nu repară codul; spune doar că e adaptat.
- 4Înlocuiește accesul la comenziwc_get_order($id) în loc de get_post; $order->get_meta(), update_meta_data(), add_meta_data(), delete_meta_data() și $order->save() în loc de funcțiile de postmeta.
- 5Detectează stocarea corectOrderUtil::custom_orders_table_usage_is_enabled(); pentru tip, OrderUtil::get_order_type() și OrderUtil::is_order() în loc de get_post_type() == 'shop_order'.
- 6Repară meta boxurileadd_meta_box cu ecranul wc_get_page_screen_id('shop-order') când HPOS este activ, 'shop_order' altfel; în callback, obține comanda cu wc_get_order dacă primești un WP_Post.
- 7Elimină interogările directeDocumentația avertizează că citirea directă din tabelele WordPress poate returna comenzi învechite; folosește WC_Order_Query și API-urile HPOS.
Declarația de compatibilitate HPOS (schelet)
phpadd_action('before_woocommerce_init', function () {
if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
}
});Fragmentele de cod sunt scheleturi: le adaptezi la magazinul tău și le testezi întâi pe un mediu de test (staging). Declară compatibilitatea doar după ce ai adaptat tot accesul la comenzi. În fișierul principal al pluginului, __FILE__ trebuie să fie calea acelui fișier.
Calling save() este o operațiune relativ costisitoare, conform ghidului: limitează apelurile. Ghidul nu detaliază wc_get_orders; pentru interogări complexe trimite spre WC_Order_Query.
Mai multe detalii
Cauze frecvente și greșeli de evitatDacă pașii de mai sus nu au rezolvat problema
Datele comenzii lipsesc din extensie
De ce: Citește din postmeta, dar comanda e în HPOS.
Ce faci: Folosește $order->get_meta().
Meta box-ul dispare
De ce: Ecranul de comenzi este altul sub HPOS.
Ce faci: Folosește ecranul wc_get_page_screen_id('shop-order').
Rapoarte inconsistente
De ce: Interogări directe pe tabelele de postări.
Ce faci: Folosește API-urile WooCommerce.
Întrebări frecvente4 răspunsuri
Declarația de compatibilitate repară extensia?
Nu; spune doar că extensia e adaptată. Adaptarea se face în cod.
Pot citi comenzile cu SQL?
Ghidul avertizează că accesul direct la tabelele WordPress poate citi comenzi învechite.
Cum aflu stocarea activă?
Cu OrderUtil::custom_orders_table_usage_is_enabled().
Mă ajutați să adaptăm codul?
Da. Cere ofertă fixă.
Subiecte acoperite pe această pagină
- extensii incompatibile HPOS
- declare_compatibility custom_order_tables
- wc_get_order
- OrderUtil
- adaptare cod HPOS
Ghiduri apropiate
- WooCommerce: activarea HPOS fără pierderea comenzilor
- WooCommerce: migrarea checkout-ului clasic la Checkout Blocks
- WooCommerce: adăugarea câmpurilor personalizate în Checkout Blocks
- Actualizarea șabloanelor WooCommerce suprascrise de temă
- WooCommerce: repararea sarcinilor blocate în Action Scheduler
- WooCommerce: reducerea solicitărilor cart fragments
- WooCommerce: activarea HPOS fără pierderea comenzilor
- Toate ghidurile
Surse și verificare
- HPOS: ghidul de adaptare pentru dezvoltatori
- High-Performance Order Storage (documentație WooCommerce)
Verificat pe 5 noiembrie 2026. Denumirile din setări și pașii pot diferi între versiuni.
