Sari la conținut
WEBLURE

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

Vrei să ți-o facem noi?

Doar două câmpuri. Răspundem în aceeași zi lucrătoare, cu ofertă fixă.

+ Telefon și detalii (opțional)

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

  1. 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.
  2. 2Cere o versiune compatibilăPentru extensii terțe, verifică changelog-ul și contactează dezvoltatorul. Reparațiile în codul altora se pierd la actualizare.
  3. 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. 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.
  5. 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'.
  6. 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.
  7. 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)

php
add_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.

Nu vrei să te complici sau ai rămas blocat? Scrie-ne și o facem noi.

Scrie-ne pe WhatsAppCere ofertă

Mai multe detalii

Cauze frecvente și greșeli de evitatDacă pașii de mai sus nu au rezolvat problema
1

Datele comenzii lipsesc din extensie

De ce: Citește din postmeta, dar comanda e în HPOS.

Ce faci: Folosește $order->get_meta().

2

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').

3

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ă.