如何仅针对Private分类商品修改支付后的订单状态?
解决WooCommerce仅修改Private分类商品订单状态的问题
你的代码没有对订单内的商品分类做判断,所以会对所有订单生效。下面是修改后的代码,只会对包含Private分类商品的订单生效:
add_action( 'woocommerce_order_status_processing', 'processing_to_completed_for_private_category'); function processing_to_completed_for_private_category($order_id){ $order = wc_get_order($order_id); $has_private_product = false; // 遍历订单中的所有商品 foreach ($order->get_items() as $item) { $product_id = $item->get_product_id(); // 检查商品是否属于Private分类(这里用分类slug,确保和你的实际分类slug一致) if (has_term('private', 'product_cat', $product_id)) { $has_private_product = true; break; // 只要找到一个符合的商品就停止遍历 } } // 如果订单包含Private分类商品,更新状态为refunded if ($has_private_product) { $order->update_status('refunded'); } }
关键说明:
- 用
wc_get_order()替代new WC_Order(),这是WooCommerce官方推荐的获取订单对象的方式 - 通过
get_items()遍历订单内的所有商品,逐个检查分类归属 has_term()函数的三个参数分别是:分类slug('private')、分类类型(产品分类对应'product_cat')、产品ID- 如果你的Private分类slug不是
'private',需要把第一个参数改成你后台实际的分类slug(在WooCommerce分类编辑页可查看) - 设置
$has_private_product标志位,只要订单内存在一个目标分类的商品,就执行状态更新
内容的提问来源于stack exchange,提问作者Ultimate Workouts Gym
相关产品推荐
相关产品推荐

