Gravity Formsは適度に優れた文書を提供し、もちろんGoogleは開発者がこのプラグインに関連する他の課題をどのように解決したかについてのより多くの洞察を提供します。
Gform_after_submissionフックを使用してSOAP Webサービスへのトランザクションを開き、送信されたフォーム値の一部を送信します。
ここで私たちが行き詰まっているのは、ラジオとチェックボックスから(そしておそらく<select>
からも)選択された値を取得することです。
Gravity Formsは、IDを使用してフィールドを渡すためにシステムを使用し、ラジオから値を渡すために小数点を使用します。次に例を示します。
フィールド名:プレフィックス - フィールドID:1 - フィールド値:1.1 "Mr."、1.2 "Mrs."
重力フォームは値の配列をフックに渡します - "Mr."の場合オプションが選択されています:
array(..) {
["1.1"]=> string(0) "Mr."
["1.2"]=> string(0) ""
}
しかし、配列はどちらの値が選択されたのかを示しません - 単に両方の文字列を渡します。
2つの値のみを扱う場合は、そのような問題はありません。ただし、フィールドには数百の値が含まれている可能性があり、これらの値は管理インターフェースを介してクライアントによって更新できます。
Gravity Formsコードベースを検索すると、次のようないくつかの可能性があります。
$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オブジェクトの一部です)を渡す必要がありますが、これもまた最もきれいな方法ではありません。
1つのアイデアは送信された値のために$ _POSTオブジェクトを検索することです - これは設定値のみを含み、空の値は含まない - プレフィックスの場合はそうです:
["input_1_1"]=> string(3) "Mr."
確実な解決策は、各フィールドが持つ値の数など、Gravityフォーム内に格納されているフィールドに関する情報に依存します。選択した各値をコンマで区切ってフォーマット済み文字列を返す。
おそらくGravity Formsはこの問題に対する既存の解決策をすでに持っています - しかし文書には何もありません - どんな洞察も歓迎しました!
Form/fieldオブジェクトがある場合は、Gravity Forms 1.9.13で追加されたGF_Field :: get_value_export()メソッドを使用して、選択したフィールドを含むカンマ区切りの文字列を取得できます。
あなたが1つか2つのフィールドでそれを使うつもりなら、あなたはこのような何かをすることができます:
$field_id = 4;
$field = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';
選択テキストを返したい場合、上記は選択された選択肢の値を返します。get_value_export()の3番目のパラメータを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 );