WooCommerce - La variable global $product devuelve valor nulo
Mi código es:
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);
Quiero pasar el precio del producto, SKU, descripción y nombre a una API de terceros.
Por favor ayúdenme.

El problema es que el objeto $product
no existe donde estás intentando acceder a él (cuando haces clic en "publicar" en el editor).
Como mencionó Jacob Peattie en los comentarios, probablemente podrías obtener todo del objeto $post
. Pero también puedes obtener el objeto $product
desde $post->ID
y luego usar los métodos "get_" disponibles en el objeto para obtener los valores que necesitas.
Aquí está tu código revisado para obtener estos valores a través de $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' ) )
) {
// Obtener el objeto producto para este ID:
$product = wc_get_product( $post->ID );
// Usar métodos "get_" para los valores:
$product_sku = $product->get_sku();
$product_name = $product->get_name();
$product_price = $product->get_price();
$product_desc = $product->get_description();
// Hacer lo que necesites para el servicio de terceros aquí...
}
}
add_action( 'transition_post_status', 'sync_on_product_save', 10, 3 );

No hay razón para usar global $post o $product en este código. De hecho, podría hacer que $post
sea incorrecto. Simplemente usa el objeto post pasado como parámetro.

Estoy de acuerdo - realmente no había revisado eso ya que estaba enfocado en la otra parte de su código. Pero eso debería eliminarse (editando ahora).

Mi problema está resuelto. Utilizo el hook woocommerce_process_product_meta en lugar de transition_post_status. Gracias por su respuesta.
