Получить элементы заказа и продукт WC Order Item в Woocommerce 3

хорошо, читая об изменениях в Woocommerce 3.0+, кажется, что вы больше не можете получить доступ к этому классу напрямую, поэтому я бы предположил, что этот код нужно изменить, так как он выплевывает ошибку:

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

но, к сожалению, я не уверен, как изменить этот код, чтобы использовать правильные новые функции геттера и сеттера в новейшей версии этого класса, у которого больше нет конструкции. Как это сделать правильно? Я не вижу никакого

2 ответов


если вы используете get_id() способ, вы получаете свой ID элемента 15 в коде.

получить идентификатор продукта:
Правильный метод WC_Order_Item_Product для получения идентификатора продукта:get_product_id()

получить идентификатор заказа
Правильный метод WC_Order_Item_Product для получения идентификатора заказа: get_order_id()

получить объект WC_Product
Правильный метод WC_Order_Item_Product для получения объекта WC_Product: get_product()

получить объект WC_Order
Правильный метод WC_Order_Item_Product для получения объекта WC_order: get_order()

получить и снять защиту данных и метаданных используя WC_Data методы:
get_data()
get_meta_data()


получить объект WC_Product:

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

// The product ID
$product_id = $order_item->get_product_id(); 
// The order ID
$order_id = $order_item->get_order_id(); 

// The WC_Product object
$product = $order_item->get_product(); 
// The WC_Order object
$order = $order_item->get_order(); 

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

получить элементы заказа из объекта WC_Order:

$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 ){
    //Get the product ID
    $product_id = $item_product->get_product_id();
    //Get the WC_Product object
    $product = $item_product->get_product();
    //Get the product SKU (using WC_Product method)
    $sku = $product->get_sku();
}

доступ к данным WC_Order_Item_Product и их защита:

вы можете использовать все WC_Order_Item_Product data методы или вы можете снять защиту данных, используя WC_Data следующих методов:

$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 ){

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

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

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

    // get only additional meta data (formatted in an unprotected array)
    $formatted_meta_data = $item->get_formatted_meta_data();
}

для справки:


WC_Order_Item_Product наследуется от WC_Order_Item, который имеет get_order_id (), поэтому вы можете получить идентификатор заказа с

$order_item->get_order_id();