如果产品缺货,我需要从产品中删除销售价格。我发现了一些代码片段,但是它们都不起作用。找不到正确的解决方案。这是我的以下功能,请告知:
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');
答案 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上测试。此功能不影响订单。