Wie überprüfe ich, ob eine bestimmte ID für eine Produktvariation gilt? woocoomerce

Lesezeit: 3 Minuten

Ich habe ein Array voller Produkt-SKUs, die ich nach der ID suche.

$ID = wc_get_product_id_by_sku($CodProduto);

Dann initialisiere ich das Objekt und setze den Bestand auf die aktuelle Menge.

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

So weit, ist es gut! Alles funktioniert gut. Mein Problem ist, wenn die $ID ist für eine Produktvariation, die das Objekt nicht initialisiert und einen Fehler ausgibt. Also initialisiere ich alle IDs mit:

$Product = new WC_Product_Variation( $ID );

Und dann aktualisiere ich die Aktie wie zuvor. Das Problem ist, dass, wenn ein Produkt KEINE Variationen hat, der WooCommerce den Namen als (keinen Titel) setzt, aber der Bestand gut funktioniert.

Gibt es eine Möglichkeit zu überprüfen, ob die ID für eine Variation gilt, ohne das Objekt $Product zu initialisieren???
Geben Sie hier die Bildbeschreibung ein

Sie können das Produkt erhalten, indem Sie wc_get_product() verwenden.

$product = wc_get_product($ID);

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

So erhalten Sie immer die richtige Produktklasse simple/variation.

  • Ich denke, am Ende sollte ein weiteres ELSE mit NULL-Wert stehen. Nicht 100% sicher durch.

    – Fresz

    25. Oktober 2019 um 21:49 Uhr

  • Funktioniert nicht, sagte ich, wenn Sie tun $product = wc_get_product($ID); und die $ID ist für eine Variation, die einen schwerwiegenden Fehler ergibt. Ich habe dies bereits getan, indem ich try catch verwendet habe. Ich poste es, wenn ich kann.

    – Alexis García

    6. November 2019 um 16:17 Uhr

  • @AlexisGarcia dies ist ein getesteter Code, protokollieren Sie möglicherweise die ID und prüfen Sie, ob diese IDs gültige Variationen oder einfache Produkte sind.

    – Antonio Chasouras

    7. November 2019 um 16:37 Uhr

  • Ich habe es getestet, es gibt mir einen schwerwiegenden Fehler, deshalb habe ich um Hilfe gebeten. Wenn Sie meinen Code lesen, mache ich das bereits mit einfachen Produkten.

    – Alexis García

    8. November 2019 um 17:18 Uhr

  • Sie müssen den Fehler aus dem Protokoll mit uns teilen 🙂

    – Antonio Chasouras

    8. November 2019 um 17:22 Uhr

Sie können mit get_parent_id() prüfen, ob es sich bei dem Produkt um eine Variation handelt. Wenn es sich um eine Variation handelt, erhalten Sie die übergeordnete ID, wenn nicht, erhalten Sie null. dh

$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
}

Ich denke, Sie können eine andere Methode verwenden, indem Sie in der Datenbank suchen

Wenn Sie sich beispielsweise nicht sicher sind, ob diese ID für ein Produkt oder ein Variationsprodukt gilt, können Sie Folgendes verwenden:

( get_post( not_sure_ID ) )->post_parent;

Als untergeordneter Beitrag (Variationsprodukt) ist sein übergeordneter Wert nicht 0. Andererseits ist er 0 (Produkt).

oder

( get_post( not_sure_ID ) )->post_type;

Wenn diese ID für Variationsprodukte gilt, sollte der Rückgabewert sein Produktvariation

Wenn Sie die ID in get_post_type() eingeben, sollte sie entweder mit „product“ oder „product_variation“ zurückkehren. Das hat bei mir funktioniert.

$post_type = get_post_type($ID);

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

1446660cookie-checkWie überprüfe ich, ob eine bestimmte ID für eine Produktvariation gilt? woocoomerce

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy