WooCommerce - La variabile globale $product restituisce valore null
Il mio codice è:
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);
Voglio passare il prezzo del prodotto, SKU, descrizione e nome a un'API di terze parti.
Per favore aiutami.

Il problema è che l'oggetto $product
non esiste nel punto in cui stai cercando di accedervi (quando premi "pubblica" nell'editor).
Come ha menzionato Jacob Peattie nei commenti, probabilmente potresti ottenere tutto dall'oggetto $post
. Ma puoi ottenere l'oggetto $product
dall'$post->ID
e poi utilizzare i metodi "get_" disponibili nell'oggetto per ottenere i valori di cui hai bisogno.
Ecco il codice rivisto per ottenere questi valori tramite $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' ) )
) {
// Ottieni l'oggetto prodotto per questo ID:
$product = wc_get_product( $post->ID );
// Usa i metodi "get_" per i valori:
$product_sku = $product->get_sku();
$product_name = $product->get_name();
$product_price = $product->get_price();
$product_desc = $product->get_description();
// Fai ciò che ti serve per il servizio di terze parti qui...
}
}
add_action( 'transition_post_status', 'sync_on_product_save', 10, 3 );

Non c'è motivo di usare global $post o $product in questo codice. Se mai, potrebbe rendere $post
non corretto. Basta usare l'oggetto post passato come parametro.

Concordo - non l'avevo davvero considerato perché ero concentrato sull'altra parte del suo codice. Ma dovrebbe essere rimosso (sto modificando ora).

Il mio problema è risolto. Uso l'hook woocommerce_process_product_meta invece di transition_post_status. Grazie per la risposta.
