如何在WooCommerce加入购物车验证时获取分组产品ID
WooCommerce 分组产品购物车验证优化
一、获取分组产品ID的方法
获取分组产品(父产品)ID的方式很直接:
- 后台打开目标分组产品的编辑页面,浏览器地址栏中
post=xxx里的xxx就是分组产品ID - 或者在产品列表页,鼠标悬停在分组产品名称上,弹出的链接地址里也能看到ID
二、修改代码实现分组专属限制
原代码对所有7个简单产品都生效,现在调整为仅针对需要限制的分组下的子产品触发验证逻辑,修改后的完整代码如下:
add_filter( 'woocommerce_add_to_cart_validation', 'check_group_product_restriction', 10, 3 ); function check_group_product_restriction( $passed, $product_id, $quantity ) { // 替换为你需要限制购买的分组产品ID $restricted_group_id = 123; // 替换为必须先添加到购物车的特定产品ID $required_product_id = 8475; // 获取当前产品所属的分组产品ID(父ID) $parent_product_id = wp_get_post_parent_id( $product_id ); // 仅对目标分组下的子产品执行验证 if ( $parent_product_id == $restricted_group_id ) { $found = false; // 检查购物车中是否存在必填产品 foreach ( WC()->cart->get_cart() as $cart_item ) { if ( $cart_item['product_id'] == $required_product_id ) { $found = true; break; } } // 若必填产品不在购物车,阻止添加并提示 if ( ! $found ) { $passed = false; $product_name = get_the_title( $product_id ); wc_add_notice( sprintf( __( '抱歉,您必须先购买产品 %s 才能添加 %s', 'your-theme' ), get_the_title( $required_product_id ), $product_name ), 'error' ); } } return $passed; }
关键逻辑说明
$restricted_group_id:指定需要限制的分组产品ID,另一个分组下的产品不会触发验证规则,可无限制购买wp_get_post_parent_id( $product_id ):通过这个函数获取当前简单产品所属的分组ID,以此区分两个分组的子产品- 只有当用户添加的是目标分组下的子产品时,才会触发购物车检查逻辑,完全匹配需求场景
内容的提问来源于stack exchange,提问作者Gamliel PERETZ
相关产品推荐
相关产品推荐

