在gform_pre_render钩子中更新Gravity Forms产品价格失败求助
解决Gravity Forms多页表单中产品字段价格无法更新的问题
你的问题出在没有针对Gravity Forms产品字段的结构正确修改价格属性,不同类型的产品字段存储价格的位置不一样,下面是针对不同场景的解决方案:
1. 针对「单一产品(Single Product)」字段的修改代码
如果字段42是单一产品类型,需要同时修改basePrice、products数组中的价格以及前端显示的price文本:
add_filter( 'gform_pre_render_2', function( $form ) { $current_page = \GFFormDisplay::get_current_page( $form['id'] ); if ( $current_page == 3 ) { foreach( $form['fields'] as &$field ) { // 更新HTML字段内容 if ( $field->id == 41 ) { $field->defaultValue = 'Content from pre-render'; } // 更新单一产品字段的价格 if ( $field->id == 42 && $field->type == 'product' ) { // 设置基础价格数值 $field->basePrice = 500; // 设置输入框默认值(如果产品字段带数量输入) $field->defaultValue = '500'; // 同步更新产品数组中的价格(部分场景依赖这个值) if ( isset( $field->products[0] ) ) { $field->products[0]['price'] = 500; } // 设置前端显示的格式化价格文本 $field->price = '$500 CAD'; } } } return $form; } );
2. 针对「产品选项(Radio/Checkbox)」字段的修改代码
如果字段42是带价格的单选/复选框产品选项,需要遍历每个选项修改价格和显示文本:
add_filter( 'gform_pre_render_2', function( $form ) { $current_page = \GFFormDisplay::get_current_page( $form['id'] ); if ( $current_page == 3 ) { foreach( $form['fields'] as &$field ) { if ( $field->id == 41 ) { $field->defaultValue = 'Content from pre-render'; } // 更新产品选项字段的价格 if ( $field->id == 42 && in_array( $field->type, ['radio', 'checkbox'] ) && isset( $field->products ) ) { foreach ( $field->products as &$product ) { // 修改选项的价格数值 $product['price'] = 500; // 修改选项的显示文本(包含新价格) $product['text'] = '你的产品名称 - $500 CAD'; } } } } return $form; } );
关键注意事项
- 确认字段类型:先在表单编辑器中查看字段42的具体类型,选择对应代码修改。
- 清除缓存:如果站点启用了缓存插件,修改代码后要清除缓存,确保新代码生效。
- 避免冲突:检查是否有其他Gravity Forms扩展或自定义钩子干扰了价格设置。
内容的提问来源于stack exchange,提问作者Jay A
相关产品推荐
相关产品推荐

