You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在WooCommerce中实现订单完成后将商品设为草稿(单次售卖)

当然有可行的方案!我经常给客户做类似的定制需求,这个需求完全可以通过WooCommerce的钩子系统来实现,步骤其实很清晰:

实现方案详解

核心思路

WooCommerce提供了专门的钩子来监听订单状态变更,我们可以利用woocommerce_order_status_completed这个钩子——当订单状态变为「已完成」时,自动触发自定义逻辑:遍历订单内的所有商品,将它们的发布状态修改为「草稿」,这样商品就会从商店前台消失,无法再次被购买。

具体代码实现

你可以把下面的代码添加到你的WordPress主题的functions.php文件中,或者创建一个简单的自定义插件(更推荐后者,避免主题更新丢失代码):

add_action( 'woocommerce_order_status_completed', 'set_order_products_to_draft_on_completion', 10, 1 );

function set_order_products_to_draft_on_completion( $order_id ) {
    // 获取订单对象
    $order = wc_get_order( $order_id );
    
    if ( ! $order ) {
        return;
    }
    
    // 遍历订单中的所有商品
    foreach ( $order->get_items() as $item ) {
        // 获取商品ID(注意:如果是可变产品,这里拿到的是子产品ID)
        $product_id = $item->get_product_id();
        
        // 更新商品状态为草稿
        wp_update_post( array(
            'ID'          => $product_id,
            'post_status' => 'draft'
        ) );
        
        // 可选:如果是可变产品,同时将父产品设为草稿(根据你的需求选择)
        $parent_id = wp_get_post_parent_id( $product_id );
        if ( $parent_id ) {
            wp_update_post( array(
                'ID'          => $parent_id,
                'post_status' => 'draft'
            ) );
        }
    }
}

关键注意事项

  • 测试优先:先在测试环境验证功能,避免影响线上商店。可以手动创建测试订单并标记为「已完成」,检查商品是否被设为草稿。
  • 可变产品处理:代码中已经包含了可变产品的父产品处理逻辑,如果你的商店主要是简单产品,可以去掉这部分代码。
  • 库存配合:如果你的商品本来设置了库存为1,WooCommerce默认会在卖完后将商品设为「缺货」,但我们的代码会直接设为草稿,两者不冲突,但建议根据需求调整库存设置。
  • 代码维护:如果使用主题的functions.php,记得在主题更新前备份代码;更推荐用自定义插件来存放这段代码,安全性和可维护性更高。

内容的提问来源于stack exchange,提问作者dhaou bilel

火山引擎 最新活动