¿Cómo verificar si una identificación dada es para una variación de producto? woocoomerce

3 minutos de lectura

Tengo una matriz llena de SKU de productos para los que busco el ID.

$ID = wc_get_product_id_by_sku($CodProduto);

luego inicializo el objeto y configuro el stock para la cantidad actual.

$Product = new WC_Product( $ID);
$return = wc_update_product_stock( $Product, $Stock);

¡Hasta ahora, todo bien! Todo funciona bien. Mi problema es cuando el $ID es para una variación del producto, no inicializará el objeto y dará un error. Así que inicializo todas las ID con:

$Product = new WC_Product_Variation( $ID );

Y luego actualizo el stock como lo hice antes. El problema es que cuando un producto NO tiene variación, el woocommerce pone el Nombre como (sin título) pero el stock funciona bien.

¿Hay alguna forma de comprobar si el ID es para una variación sin inicializar el objeto $Producto?
ingrese la descripción de la imagen aquí

Puede obtener el producto utilizando wc_get_product().

$product = wc_get_product($ID);

if( $product->is_type( 'simple' ) ){
    // simple product
} elseif( $product->is_type( 'variable' ) ){
   // variable product
}

De esta forma, siempre obtendrá la clase de producto correcta simple/variante.

  • Creo que debería haber otro ELSE al final con valor NULL. No estoy 100% seguro.

    – Fresz

    25 oct 2019 a las 21:49

  • No funciona, dije que si lo haces $product = wc_get_product($ID); y el $ID es para una variación, dará un error fatal. Ya hice esto usando try catch, lo publicaré cuando pueda.

    – Alexis García

    6 de noviembre de 2019 a las 16:17

  • @AlexisGarcia este es un código probado, tal vez registre errores en la identificación y verifique si estas identificaciones son variaciones válidas o productos simples.

    – Antonio Chasouras

    7 de noviembre de 2019 a las 16:37

  • Lo probé, me da un error fatal, por eso estaba pidiendo ayuda. Si lees mi código, ya lo hago con productos simples.

    – Alexis García

    8 de noviembre de 2019 a las 17:18

  • Deberá compartir el error del registro con nosotros 🙂

    – Antonio Chasouras

    8 de noviembre de 2019 a las 17:22

Puede verificar si el producto es una variación con get_parent_id(), si es una variación, obtendrá la identificación principal, si no, obtendrá cero. es decir

$product=wc_get_product($product_id);
$product_parent=$product->get_parent_id();

if($product_parent==0){
//what you want to do with non product that is not a variation
}else{
//what you want to do with product variation
}

Creo que puedes usar otro método buscando en la base de datos.

Por ejemplo, si no está seguro de si este ID es para Producto o Producto de variación, puede usar:

( get_post( not_sure_ID ) )->post_parent;

Como publicación secundaria (Producto de variación), su valor principal no será 0. Por otro lado, es 0 (Producto).

o

( get_post( not_sure_ID ) )->post_type;

Si este ID es para Producto de variación, el valor devuelto debe ser variación_producto

Si ingresa la ID en get_post_type(), debería regresar con ‘producto’ o ‘producto_variación’. Esto funcionó para mí.

$post_type = get_post_type($ID);

if( $post_type == 'product' ){
    // product
} elseif( $post_type == 'product_variation' ){
   // product variation
}

¿Ha sido útil esta solución?