Estaba tratando de recuperar el costo del primer artículo de línea en el pedido de Woocommerce 3.X con el siguiente código, pero solo funciona cuando hay un producto en el pedido, si hay más de uno, seleccionará el último costo del producto cuando se repita , por favor avise qué salió mal.

    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
        $product_price = $product->get_price();
        $item_quantity = $item_data->get_quantity(); // Get the item quantity
        $item_total = $item_data->get_total(); // Get the item line total

        // Displaying this data (to check)
    }

¡Gracias!

1
Calvin Seng 21 feb. 2018 a las 18:07

2 respuestas

La mejor respuesta

La declaración foreach () repite un grupo de declaraciones incrustadas para cada elemento en una matriz o una colección de objetos.


En cada iteración accederá a cada artículo, por lo que al final del ciclo tendrá el costo del último artículo.

Para devolver el costo del primer artículo, agregue antes del final de foreach () break;.

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

      .
      .

        break;
    }

De esta manera, foreach () solo se repetirá para el primer elemento.

0
Rania Ts 21 feb. 2018 a las 15:28

Puede usar la función php reset() para mantener solo el primer $ elemento en la matriz de elementos del pedido, evitando usar un bucle foreach:

$order_items = $order->get_items(); // Get the order "line" items
$item = reset($order_items); // Keep the 1st item

// Get an instance of the WC_Product object
$product = $item->get_product();
$product_name = $product->get_name(); // Get the product name
$product_price = $product->get_price(); // Get the product active price
$item_quantity = $item->get_quantity(); // Get the item quantity
$item_total = $item->get_total(); // Get the item line total

// Displaying the cost of the first item
echo $item_total;

Probado y funciona

1
LoicTheAztec 21 feb. 2018 a las 15:59