我尝试使用Woocommerce中的'Hide if sold out'选项。但我使用不同的插件来显示我的产品(GridFX Masonry Gallery),它仍然显示已售罄的产品。有没有办法在购买最后一件商品并将其售罄时将产品更改为草稿?有这样的片段吗?
答案 0 :(得分:1)
Maha Dev之前的回答无效。
在主题函数文件中,除非您使用get_stock_quantity()
调用产品数据,否则wc_get_product
方法不存在。
使用set_post_type
会更改帖子的实际类型,而不是它的状态,您需要使用wp_update_post
并设置帖子状态。
这是我最终使用的代码:
/*
* Unpublish products after purchase
*/
function lbb_unpublish_prod($order_id) {
$order = new WC_Order( $order_id );
$all_products = $order->get_items();
foreach ($all_products as $product){
$product_object = wc_get_product($product['product_id']);
// This will only work if stock management has been enabled
if( ! $product_object->get_stock_quantity() ) {
wp_update_post(array(
'ID' => $product['product_id'],
'post_status' => 'draft'
));
}
}
}
add_action( 'woocommerce_thankyou', 'lbb_unpublish_prod', 10, 1 );
答案 1 :(得分:0)
更好的方法是设置产品库存(在您的情况下为1)。选择“隐藏缺货产品”。它将隐藏缺货产品。但如果您确实要隐藏订购的产品,请参阅下面的代码:
//functions.php
add_action( 'woocommerce_thankyou', 'your_func', 10, 1 );
function your_func($order_id) {
$order = new WC_Order( $order_id );
$all_products = $order->get_items();
foreach ($all_products as $product){
// This will only work if stock management has been enabled
if( ! $product->get_stock_quantity() )
set_post_type ($product['product_id'], 'draft');
}
}
这将隐藏购物车中添加的所有产品以便订购。您可以根据需要自定义此功能。