WooCommerce - Variabila globală $product returnează valoare null
Codul meu este:
function sync_on_product_save($new_status, $old_status, $post) {
global $post;
global $product;
if(
$old_status != 'publish'
&& $new_status == 'publish'
&& !empty($post->ID)
&& in_array( $post->post_type,
array( 'product')
)
) {
print_R($product);
}
}
add_action('transition_post_status', 'sync_on_product_save', 10, 3);
Vreau să transmit prețul produsului, SKU, descrierea și numele către un API terț.
Vă rog să mă ajutați.

Problema este că obiectul $product
nu există în momentul în care încerci să-l accesezi (când apeși "publică" în editor).
După cum a menționat Jacob Peattie în comentarii, probabil ai putea obține toate informațiile din obiectul $post
. Dar, poți obține obiectul $product
din $post->ID
și apoi să folosești metodele "get_" disponibile în obiect pentru a obține valorile de care ai nevoie.
Iată codul revizuit pentru a obține aceste valori prin intermediul $product
:
function sync_on_product_save( $new_status, $old_status, $post ) {
if (
$old_status != 'publish'
&& $new_status == 'publish'
&& ! empty( $post->ID )
&& in_array( $post->post_type, array( 'product' ) )
) {
// Obținem obiectul produs pentru acest ID:
$product = wc_get_product( $post->ID );
// Folosim metodele "get_" pentru valori:
$product_sku = $product->get_sku();
$product_name = $product->get_name();
$product_price = $product->get_price();
$product_desc = $product->get_description();
// Faci ce ai nevoie pentru serviciile terțe aici...
}
}
add_action( 'transition_post_status', 'sync_on_product_save', 10, 3 );

Nu există niciun motiv să folosești global $post sau $product în acest cod. Dacă ceva, ar putea face $post
incorect. Folosește pur și simplu obiectul post transmis ca parametru.

Sunt de acord - nu m-am uitat cu atenție la asta deoarece m-am concentrat pe cealaltă parte a codului său. Dar asta ar trebui eliminat (editez acum).

Problema mea este rezolvată. Am folosit hook-ul woocommerce_process_product_meta în loc de transition_post_status. Mulțumesc pentru răspuns.
