如何在Woocommerce中删除特定产品的销售价格?

时间:2020-07-27 18:11:52

标签: php wordpress woocommerce

UPD。我不需要重新计算订单或购物车,如果订单成功后库存的数量为零,则无需删除产品的销售价格。

如果产品缺货,我需要从产品中删除销售价格。我发现了一些代码片段,但是它们都不起作用。找不到正确的解决方案。这是我的以下功能,请告知:

function remove_sale_price ( $order_id ) { 
    $order = new WC_Order( $order_id );
    foreach ( $order->get_items() as $item_id => $item ) {
        $prod_id  = $item->get_product_id();
        $name     = $item->get_name();
        $product  = wc_get_product($prod_id);
        if ($product->is_type( 'variable' )) {
            $prod_id  = $item->get_variation_id();
            $product  = wc_get_product($prod_id);
        }
        $quantity = $product->get_stock_quantity();
        $note     = 'Sale price removed on <b>' . $name . '</b>';
        if ( ($quantity < 1) && (!empty($product->get_sale_price()) ) ) {
            
            /*** HERE I NEED TO REMOVE SALE PRICE FROM PRODUCT ***/

            $order->add_order_note( $note );
       }
    }
}
add_action( 'woocommerce_order_status_processing', 'remove_sale_price');
add_action( 'woocommerce_order_status_completed', 'remove_sale_price');

1 个答案:

答案 0 :(得分:0)

找到了解决方案:

$product->set_sale_price('');
$product->save();

我不知道我需要保存产品。这是我的整个功能:

function remove_sale_price ( $order_id ) { 
    $order = new WC_Order( $order_id );
    foreach ( $order->get_items() as $item_id => $item ) {
        $prod_id  = $item->get_product_id();
        $name     = $item->get_name();
        $product  = wc_get_product($prod_id);
        if ($product->is_type( 'variable' )) {
            $prod_idv  = $item->get_variation_id();
            $product   = wc_get_product($prod_idv);
        }
        $quantity = $product->get_stock_quantity();
        $note     = 'Removed sale price on <b>«' . $name . '»</b>.';
        if ( $quantity < 1 ) {
            $order->add_order_note( $note );
            $product->set_sale_price('');
            $product->save();
        }
    }
}
add_action( 'woocommerce_order_status_processing', 'remove_sale_price' );
add_action( 'woocommerce_order_status_completed', 'remove_sale_price' );

功能说明:如果订单状态为“正在处理”或“已完成”(表示库存减少),该功能将检查订单中产品的库存数量(在我的情况下,我只需要检查简单和可变产品)。如果库存少于1(0,-1等),则会从产品或变体中删除销售价格。在Woocommerce 4.3.1上测试。此功能不影响订单。