Проверьте, существует ли продукт, связанный с товаром заказа, в WooCommerce - PullRequest
1 голос
/ 29 апреля 2019

Я использую следующий код для отображения количества и названий продуктов для серии заказов WooCommerce:

foreach ($order->get_items() as $item_id => $item_data) {

    // Get an instance of corresponding the WC_Product object
    $product = $item_data->get_product();

    $product_name = $product->get_name(); // Get the product name
    $item_quantity = $item_data->get_quantity(); // Get the item quantity
    echo $item_data->get_quantity() . ' x ' . $product->get_name() . ' (' . $product->get_sku() . ')<br />' ;
}

Все работает хорошо, но застревает в определенном порядке, когда продукт был удален (поэтому идентификатор продукта больше не существует).

Есть ли способ проверить такую ​​ситуацию и показать что-то вроде "товара больше не существует" и перейти к следующему товару?

1 Ответ

0 голосов
/ 29 апреля 2019

Следующее будет проверять, существует ли продукт, чтобы получить его SKU (также обрабатывать варианты продукта) :

// Loop through order items
foreach ($order->get_items() as $item_id => $item ) {
    $product_id   = (int) $item->get_product_id(); // The product ID
    $variation_id = (int) $item->get_variation_id(); // The variation ID
    $item_name    = $item->get_name(); // Get the product name
    $item_qty     = $item->get_quantity(); // Get the item quantity

    // Get the product SKU: Check that the product exist
    if ( ( get_post_type( $product_id ) === 'product' && $variation_id === 0 )
    || ( get_post_type( $product_id ) === 'product' && $variation_id > 0 
    && get_post_type( $variation_id ) === 'product_variation' ) ) {
        // Get the WC_Product Object instance
        $product = $item->get_product();

        // Check if it is a valid WC_Product Object instance (and that the sku exist)
        if ( is_a($product, 'WC_Product') && $product->get_sku() != '' ) {
            $sku = ' ('.$product->get_sku().')'; // Get the sku
        } else {
            $sku = ''; // empty
        }
    } else {
        $sku = ''; // empty
    }

    // Output   
    echo $item_qty . ' &times; ' . $item_name . $sku . '<br>';
}

Протестировано и работает.

Примечание: С позициями заказа вы можете получить название соответствующего продукта из позиции заказа вместо (поскольку оно сохранено в самой позиции заказа) .

...