如何在WCFM插件中新增groupbuy商品类型及对应专属表单字段
解决方法
1. 将groupbuy商品类型注册到WCFM支持列表
使用WCFM提供的wcfm_product_types过滤器添加自定义商品类型,代码示例:
add_filter('wcfm_product_types', 'add_groupbuy_product_type_to_wcfm'); function add_groupbuy_product_type_to_wcfm($product_types) { // 添加groupbuy类型,数组值为前端显示的标签 $product_types['groupbuy'] = __('团购商品', 'your-text-domain'); return $product_types; }
这段代码可以放到当前主题的functions.php文件,或者独立的自定义功能插件中,添加后供应商的商品发布面板的类型下拉里就会出现团购商品选项。
2. 给供应商角色分配groupbuy商品发布权限
默认WCFM的Vendor角色没有自定义商品类型的发布权限,你可以通过两种方式配置:
- 后台配置:进入WCFM权限管理页,找到供应商角色的商品发布权限配置项,勾选groupbuy商品对应的编辑、发布权限后保存即可
- 代码配置方式:
add_filter('wcfm_allowed_product_types_for_vendor', 'allow_vendor_groupbuy_access', 10, 2); function allow_vendor_groupbuy_access($allowed_types, $vendor_id) { $allowed_types[] = 'groupbuy'; return $allowed_types; }
3. 添加groupbuy专属表单标签页与字段
使用WCFM的商品编辑表单钩子注入自定义字段,示例代码如下:
3.1 新增自定义标签页
add_filter('wcfm_product_data_tabs', 'add_groupbuy_product_tab'); function add_groupbuy_product_tab($tabs) { $tabs['groupbuy_data'] = array( 'label' => __('团购设置', 'your-text-domain'), 'target' => 'groupbuy_product_data', 'class' => array('show_if_groupbuy'), // 仅选择团购商品时显示 'priority' => 25, ); return $tabs; }
3.2 标签页内插入专属字段
add_action('wcfm_product_data_panels', 'render_groupbuy_product_fields'); function render_groupbuy_product_fields() { global $post; ?> <div id="groupbuy_product_data" class="panel woocommerce_options_panel"> <?php // 示例:添加团购开始时间字段 woocommerce_wp_text_input(array( 'id' => '_groupbuy_start_time', 'label' => __('团购开始时间', 'your-text-domain'), 'placeholder' => 'YYYY-MM-DD HH:MM', 'desc_tip' => true, 'description' => __('设置团购活动的开始时间', 'your-text-domain'), 'value' => get_post_meta($post->ID, '_groupbuy_start_time', true), )); // 按照相同格式添加所有groupbuy需要的特定字段即可 ?> </div> <?php }
3.3 保存自定义字段数据
add_action('wcfm_after_product_save', 'save_groupbuy_product_fields', 10, 2); function save_groupbuy_product_fields($product_id, $wcfm_product_data) { // 仅当商品类型为groupbuy时保存字段 if ($wcfm_product_data['product_type'] == 'groupbuy') { if (isset($wcfm_product_data['_groupbuy_start_time'])) { update_post_meta($product_id, '_groupbuy_start_time', sanitize_text_field($wcfm_product_data['_groupbuy_start_time'])); } // 对应添加其他字段的保存逻辑 } }
注意事项
- 所有自定义代码建议放在子主题的
functions.php或者独立的自定义插件中,避免主题、插件更新后代码被覆盖 - 字段的key需要和你现有groupbuy插件使用的元数据key保持一致,才能兼容管理员后台已经存在的字段逻辑
- 上线前可以用测试供应商账号验证发布、编辑流程是否正常,字段保存是否正确
内容的提问来源于stack exchange,提问作者YLR
相关产品推荐
相关产品推荐

