通过重力表单GForm_After_Submit挂钩从复选框和单选按钮中获取所选值

时间:2015-11-27 作者:Q Studio

Gravity Forms提供了一个相当好的文档,当然Google也提供了更多关于开发人员如何解决与此插件相关的其他挑战的见解,但我们需要完成看似相对简单的任务,但找不到任何文档化的方法来完成。

我们使用gform\\u after\\u提交挂钩打开一个到SOAP web服务的事务,以传输一些提交的表单值。

我们现在要做的是从收音机和复选框中获取所选的值(或多个值)(也可能是<select>\'s)。

重力表单使用系统按ID传递字段,并使用小数点从无线电传递值,例如:

字段名称:前缀-字段ID:1-字段值:1.1“Mr.”,1.2“Mrs.”

重力表单将一组值传递给挂钩-如果选择了“Mr.”选项,则包括:

array(..) {
    ["1.1"]=> string(0) "Mr."
    ["1.2"]=> string(0) ""
}
但数组没有指示选择了哪个值-它只是为这两个值传递一个字符串。

当只处理2个值时,这不是一个问题,但字段可能包含数百个值,客户机可以通过管理界面更新这些值。

搜索重力表单代码库显示了一些可能性,例如:

$value         = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead[\'currency\'] );
这需要$lead对象(也称为$entry对象),这是可用的,但该方法没有返回正确的值,引用了缺少的数据

另一种选择是:

GFFormsModel::get_lead_field_value( $lead, $field );
然而,这要求我们传递一个格式正确的$field对象,它是$form对象的一部分,但同样不是最干净的路由。

一个想法是在$\\u POST对象中搜索提交的值-这只包括设置值,而不包括空值-因此在前缀的情况下:

["input_1_1"]=> string(3) "Mr."

固溶体将依赖于重力表单中存储的字段信息,例如每个字段的值数-在其上循环并检查每个字段是否有值集,然后返回一个格式化字符串,其中每个选定值用逗号分隔。

也许Gravity Forms已经为这个问题提供了一个预先存在的解决方案-但是文档中没有任何内容-欢迎提供任何见解!

1 个回复
最合适的回答,由SO网友:richardW8k 整理而成

如果您有表单/字段对象,则可以使用重力表单1.9.13中添加的GF\\u field::get\\u value\\u export()方法检索包含所选字段的逗号分隔字符串。

如果只将其用于一个或两个字段,可以执行以下操作:

$field_id    = 4;
$field       = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : \'\';
上述操作将返回所选选项的值,如果要返回选项文本,请将get\\u value\\u export()的第三个参数设置为true,例如。

$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : \'\';
如果需要访问条目中的所有字段值,但希望格式化相关字段类型以使用选项文本,则可以执行以下操作:

add_action( \'gform_after_submission\', function ( $entry, $form ) {

    foreach ( $form[\'fields\'] as $field ) {
        $field_value = $field->get_value_export( $entry, $field->id, true );
        // do something with the field value.
    }

}, 10, 2 );