我們出售手工制品。只有一種可變產品的變體是可購買的。
訂購變體時,該可變產品的庫存變為 0,并且在訂單完成之前無法訂購該產品。我可以如下設定庫存狀態和庫存數量:
//when order is completed the stock and stock status are reset to instock and 1
add_action( 'woocommerce_order_status_completed', 'my_function' );
function my_function($order_id) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
$product_id;
foreach ( $items as $item ) {
$product_id = $item->get_product_id();
} //end foreach
$new_stock_status = 'instock';
// 1. Updating the stock quantity
update_post_meta($product_id, '_stock', 1);
// 2. Updating the stock quantity
update_post_meta( $product_id, '_stock_status', wc_clean( $new_stock_status ) );
// 3. Updating post term relationship
wp_set_post_terms( $product_id, 'outofstock', 'product_visibility', true );
// And finally (optionally if needed)
wc_delete_product_transients( $product_id ); // Clear/refresh the variation cache
}
我不確定這段代碼是否正確,但它似乎正在作業。
但是,單品頁面一直顯示缺貨資訊。只有當我添加:
//reset stock in product
add_action( 'woocommerce_admin_process_product_object', 'lumi_reset_stock' );
function lumi_reset_stock( $product ) {
// Using WC setters
$product->set_manage_stock(true);
$product->set_stock_quantity(1);
$product->set_stock_status('instock');
}
并將產品保存在后臺管理,然后產品可以再次購買。
這有點復雜。訂單完成后,如何重置產品的庫存和庫存狀態?
查看資料庫 > wp_wc_product_meta_lookup庫存狀態顯示 outofstock 并且數量為 0,即使在保存產品之后也是如此。我必須重置這些值嗎?
uj5u.com熱心網友回復:
盡管您的代碼有效,但您缺少一些檢查/要點:
- 您的更新功能適用于每個產品,而這實際上僅適用于缺貨的變體
- wc_update_product_stock() - 更新產品的庫存量
- wc_update_product_stock_status() - 更新產品的庫存狀態
所以你得到:
function action_woocommerce_order_status_completed( $order_id ) {
// The WC_Order instance Object
$order = wc_get_order( $order_id );
// Is a order
if ( is_a( $order, 'WC_Order' ) ) {
// Loop through order items
foreach ( $order->get_items() as $key => $item ) {
// The WC_Product instance Object
$product = $item->get_product();
// Product type
if ( $product->get_type() == 'variation' ) {
// NOT in stock
if ( ! $product->is_in_stock() ) {
// Update a product's stock amount
wc_update_product_stock( $product, 1, 'set', 'false' );
// Update a product's stock status
wc_update_product_stock_status( $product->get_id(), 'instock' );
}
}
}
}
}
add_action( 'woocommerce_order_status_completed', 'action_woocommerce_order_status_completed', 10, 1 );
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/433809.html
標籤:WordPress woocommerce 产品 命令 股票
