【发布时间】:2016-02-25 03:22:37
【问题描述】:
我尝试在 Woocommerce 中使用“售罄时隐藏”选项。但我使用不同的插件来展示我的产品(GridFX Masonry Gallery),它仍然显示售罄的产品。当最后一件商品被购买并售罄时,有没有办法将产品更改为草稿?有sn-p可以做到这一点吗?
【问题讨论】:
标签: php wordpress woocommerce
我尝试在 Woocommerce 中使用“售罄时隐藏”选项。但我使用不同的插件来展示我的产品(GridFX Masonry Gallery),它仍然显示售罄的产品。当最后一件商品被购买并售罄时,有没有办法将产品更改为草稿?有sn-p可以做到这一点吗?
【问题讨论】:
标签: php wordpress woocommerce
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)。选择“隐藏缺货产品”。它将隐藏缺货的产品。但是,如果您真的想隐藏订购的产品,请参阅下面的代码:
//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');
}
}
这将隐藏添加到购物车中以供订购的所有产品。您可以根据需要自定义此功能。
【讨论】: