web-dev-qa-db-fra.com

Obtention des articles de commande et de WC_Order_Item_Product dans WooCommerce 3

Ok, en lisant les changements dans WooCommerce 3.0+, il semble que vous ne puissiez plus accéder directement à cette classe. Je suppose donc que ce code doit être modifié car il génère une erreur:

$order_item_id = 15;
$order_item = new WC_Order_Item_Product($order_item_id);
$return = $order_item->get_id() ? $order_item : false;

Mais, embarrassant, je ne sais pas comment changer ce code pour utiliser les nouvelles fonctions de lecture et de définition correctes dans la version la plus récente de cette classe, qui n’a plus de construction. Comment faire cela correctement? Je ne vois aucune fonction get pour obtenir le poste de commande de la même manière que ci-dessus.
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html

Peut-être que je néglige quelque chose ici?

16
Solomon Closson

Si vous utilisez la méthode get_id(), vous obtenez votre ID d’élément qui est 15 dans votre code.

Obtenir l'ID du produit:
La méthode WC_Order_Item_Product appropriée pour obtenir l'ID de produit est la suivante: get_product_id()

Obtenir l'ID de la variante :
La méthode WC_Order_Item_Product appropriée pour obtenir l'ID de produit est la suivante: get_variation_id()

Obtenir l'ID de commande
La méthode WC_Order_Item_Product appropriée pour obtenir l'ID de commande est la suivante: get_order_id()

Récupère l'objet WC_Product
La méthode WC_Order_Item_Product appropriée pour obtenir l'objet WC_Product est la suivante: get_product()

Récupère l'objet WC_Order
La méthode WC_Order_Item_Product appropriée pour obtenir l'objet WC_order est la suivante: get_order()

Obtenir et déprotéger les données et métadonnées en utilisant WC_Data méthodes:
get_data()
get_meta_data()


Obtenez l'objet WC_Product À partir de l'ID de poste de commande:

$order_item_id = 15;
$item = new WC_Order_Item_Product($order_item_id);

// The product ID
$product_id = $item->get_product_id(); 

// The variation ID
$product_id = $item->get_variation_id(); 

// The WC_Product object
$product = $item->get_product(); 

// The quantity
$order_id = $item->get_quantity(); 

// The order ID
$order_id = $item->get_order_id(); 

// The WC_Order object
$order = $item->get_order(); 

// The item ID
$item_id = $item->get_id(); // which is your $order_item_id

// The product name
$product_name = $item->get_name(); // … OR: $product->get_name();

//Get the product SKU (using WC_Product method)
$sku = $product->get_sku();

Obtenez les articles de la commande à partir de l'objet WC_Order(et utilisez leWC_product - Objet):

$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){
    //Get the product ID
    $product_id = $item->get_product_id();

    //Get the variation ID
    $product_id = $item->get_variation_id();

    //Get the WC_Product object
    $product = $item->get_product();

    // The quantity
    $product_name = $item->get_quantity();

    // The product name
    $product_name = $item->get_name(); // … OR: $product->get_name();

    //Get the product SKU (using WC_Product method)
    $sku = $product->get_sku();
}

Accéder aux données et métadonnées personnalisées:

1) déprotéger les données et les métadonnées personnalisées WC_Order_Item_Product:

Vous pouvez utiliser toutes les WC_Order_Item_Product data == ou vous pouvez déprotéger les données à l'aide de WC_Data méthodes suivantes:

$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){

    // Get the common data in an array: 
    $item_product_data_array = $item->get_data();

    // Get the special meta data in an array: 
    $item_product_meta_data_array = $item->get_meta_data();

    // Get the specific meta data from a meta_key: 
    $meta_value = $item->get_meta( 'custom_meta_key', true );

    // Get all additional meta data (formatted in an unprotected array)
    $formatted_meta_data = $item->get_formatted_meta_data( ' ', true );
}

2) L'accès aux tableaux est toujours possible (pour la compatibilité ascendante avec les tableaux hérités) pour obtenir directement les données communes:

$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){


    $product_id    = $item['product_id']; // Get the product ID
    $variation_id  = $item['variation_id']; // Get the variation ID

    $product_name  = $item['name']; // The product name
    $item_qty      = $item['quantity']; // The quantity
    $line_subtotal = $item['line_subtotal'];  // The line subtotal
    $line_total    = $item['line_total'];  // The line subtotal

    // And so on ……
}

Comme référence:

32
LoicTheAztec

WC_Order_Item_Product hérite de WC_Order_Item, qui a get_order_id (), afin que vous puissiez obtenir l'ID de commande avec

$order_item->get_order_id();
2
ishegg