Php 从Woocommerce 3中的订单项目获取正确的变动价格

Php 从Woocommerce 3中的订单项目获取正确的变动价格,php,wordpress,woocommerce,hook-woocommerce,price,Php,Wordpress,Woocommerce,Hook Woocommerce,Price,我试图得到正确的价格为每个项目的变化,但它似乎只是得到第一个价格的产品变化。不知道如何解决这个问题 代码: $query = new WC_Order_Query( array( 'status' => 'on-hold', 'orderby' => 'date', 'order' => 'DESC', 'return' => 'ids', ) ); $order_ids = $query-&

我试图得到正确的价格为每个项目的变化,但它似乎只是得到第一个价格的产品变化。不知道如何解决这个问题

代码:

$query = new WC_Order_Query( array(
        'status' => 'on-hold',
        'orderby' => 'date',
        'order' => 'DESC',
        'return' => 'ids',
    ) );
    $order_ids = $query->get_orders();

    foreach( $order_ids as $order_id ) {


        $order = new WC_Order($order_id);


        foreach ($order->get_items() as $item_id => $item_obj) {
            $_product = wc_get_product($item_obj['product_id']);
            $product = new WC_Product_Variable($item_obj['product_id']);
            $product_variations = $product->get_available_variations();

            $variation_product_id = $product_variations [0]['variation_id'];

            $variation_product = new WC_Product_Variation( $variation_product_id );
            $t_dy =  $variation_product->get_price();
            $item_qty = $item_obj['qty'];
            $it_total = $item_qty * $t_dy;
            $td = wc_update_order_item_meta($item_id, '_line_total', $it_total);
            $order->calculate_totals();
            $order->save();
        }

    }

找到了问题!-它发错了身份证 替换:

为此:

$product_variation_id = $item_obj->get_variation_id();
$variation_product_id = $product_variation_id;
$variation_product = new WC_Product_Variation( $variation_product_id );

找到了问题!-它发错了身份证 替换:

为此:

$product_variation_id = $item_obj->get_variation_id();
$variation_product_id = $product_variation_id;
$variation_product = new WC_Product_Variation( $variation_product_id );

更新3

当订单项目是产品变体时,要获得正确的当前变体价格比您现在做的要简单得多。然后,您将使用设置订单项目总计、保存并更新订单

守则:

// Loop through order items
foreach ($order->get_items() as $item_id => $item ) {

    // Targeting only product variation items
    if( $item->get_variation_id() > 0 ){ 

        // Get an instance of the WC_Product_Variation object
        $product = $item->get_product(); 

        $price   = (float) $product->get_price(); // <=== HERE the variation price

        $qty     = (int) $item->get_quantity(); // <=== HERE the quantity

        // set line totals
        $item->set_total( $price * $qty );
        $item->set_subtotal( $price * $qty );

        $item->save(); // save order item data
    }
}

// The following need to be outside the order item loop
$order->calculate_totals(); // Save is included into the method
//循环查看订单项
foreach($order->get\u items()作为$item\u id=>$item){
//仅针对产品变化项目
如果($item->get_variation_id()>0){
//获取WC_产品_变体对象的实例
$product=$item->get_product();
$price=(float)$product->get_price();//get_quantity();//set_total($price*$quantity);
$item->set\u小计($price*$qty);
$item->save();//保存订单项目数据
}
}
//以下内容需要在订单项循环之外
$order->计算_总计();//保存包含在方法中
这样应该更好

相关的:


更新3

当订单项目是产品变体时,要获得正确的当前变体价格比您现在做的要简单得多。然后,您将使用设置订单项目总计、保存并更新订单

守则:

// Loop through order items
foreach ($order->get_items() as $item_id => $item ) {

    // Targeting only product variation items
    if( $item->get_variation_id() > 0 ){ 

        // Get an instance of the WC_Product_Variation object
        $product = $item->get_product(); 

        $price   = (float) $product->get_price(); // <=== HERE the variation price

        $qty     = (int) $item->get_quantity(); // <=== HERE the quantity

        // set line totals
        $item->set_total( $price * $qty );
        $item->set_subtotal( $price * $qty );

        $item->save(); // save order item data
    }
}

// The following need to be outside the order item loop
$order->calculate_totals(); // Save is included into the method
//循环查看订单项
foreach($order->get\u items()作为$item\u id=>$item){
//仅针对产品变化项目
如果($item->get_variation_id()>0){
//获取WC_产品_变体对象的实例
$product=$item->get_product();
$price=(float)$product->get_price();//get_quantity();//set_total($price*$quantity);
$item->set\u小计($price*$qty);
$item->save();//保存订单项目数据
}
}
//以下内容需要在订单项循环之外
$order->计算_总计();//保存包含在方法中
这样应该更好

相关的:


您是否在$product\u VARIANTIONS中获得了正确的变体id?谢谢我将再次检查输出您是否在$product\u VARIANTIONS中获得了正确的变体id?谢谢我将再次检查输出要获得当前的产品变体对象当订单项是变体时,您最好直接使用
get\u product()
方法,如
$product=$item\u obj->get\u product()…它将简化您的代码。若要在订单项为变体时获取当前产品变体对象,最好直接使用
get_product()
方法,如
$product=$item_obj->get_product()…它将简化您的代码。