WooCommerce中指定单个虚拟产品付款后设订单状态为Processing
WooCommerce:指定虚拟产品付款后设置为Processing状态
默认情况下,WooCommerce中所有虚拟产品的订单在付款完成后会自动标记为Completed状态。如果需要让特定ID的单个虚拟产品,其对应订单付款完成后状态改为Processing,可以通过以下代码实现:
// 设置目标虚拟产品ID,请替换为你的产品ID $target_product_id = 123; add_filter( 'woocommerce_payment_complete_order_status', 'custom_payment_complete_order_status', 10, 3 ); function custom_payment_complete_order_status( $status, $order_id, $order ) { global $target_product_id; // 遍历订单中的所有商品 foreach ( $order->get_items() as $item ) { $product_id = $item->get_product_id(); // 检查是否包含目标产品 if ( $product_id == $target_product_id ) { // 返回Processing状态 return 'processing'; } } // 如果没有目标产品,保持原有状态逻辑 return $status; }
代码说明:
- 将代码添加到你的WordPress主题
functions.php文件,或者自定义功能插件中(不建议修改WooCommerce核心文件)。 - 把
$target_product_id的值替换为你需要设置的虚拟产品ID。 - 该代码通过
woocommerce_payment_complete_order_status过滤器,拦截付款完成后的状态设置逻辑:如果订单包含目标产品,就将状态改为Processing;否则沿用WooCommerce默认的状态规则(虚拟产品自动设为Completed,实体产品设为Processing)。
内容的提问来源于stack exchange,提问作者DavidIsenoi
相关产品推荐
相关产品推荐

