Obțineți valori selectate din checkbox-uri și radio buttons prin hook-ul gform_after_submission al Gravity Forms
Gravity Forms oferă o documentație destul de bună, iar Google oferă și mai multe informații despre cum au rezolvat alți dezvoltatori diverse provocări legate de acest plugin - dar trebuie să realizăm o sarcină care pare relativ simplă, dar nu am găsit nicio metodă documentată pentru a o face.
Folosim hook-ul gform_after_submission
pentru a iniția o tranzacție către un serviciu web SOAP și a transmite unele dintre valorile trimise prin formular.
Problema la care am rămas blocati este acum să obținem valoarea (sau valorile) selectate din radio buttons și checkbox-uri (și probabil și din <select>
-uri).
Gravity Forms folosește un sistem pentru a transmite câmpurile după ID și folosește puncte zecimale pentru a transmite valorile de la radio buttons - de exemplu:
Nume câmp: Prefix - ID câmp: 1 - Valori câmp: 1.1 "Dl.", 1.2 "Dna."
Gravity Forms transmite un array cu valorile către hook - dacă opțiunea "Dl." este selectată, acestea sunt:
array(..) {
["1.1"]=> string(0) "Dl."
["1.2"]=> string(0) ""
}
Dar array-ul nu are nicio indicație despre care valoare a fost selectată - pur și simplu transmite un string pentru ambele.
Nu e o problemă atât de mare când ai de-a face doar cu 2 valori - dar câmpurile pot conține sute de valori și acestea pot fi actualizate de client prin interfața de administrare.
Căutând în codul sursă al Gravity Forms am găsit câteva posibilități - cum ar fi:
$value = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead['currency'] );
Aceasta necesită obiectul $lead - care se mai numește și obiectul $entry - acesta este disponibil, dar metoda nu returnează valoarea corectă, menționând date lipsă
O altă opțiune este:
GFFormsModel::get_lead_field_value( $lead, $field );
Totuși, aceasta necesită să transmitem un obiect $field formatat corect - care face parte din obiectul $form - dar din nou, nu este cea mai elegantă soluție.
O idee ar fi să căutăm în obiectul $_POST valorile trimise - acesta include doar valorile setate și nu pe cele goale - deci în cazul Prefixului:
["input_1_1"]=> string(3) "Dl."
O soluție solidă s-ar baza pe informații despre câmp stocate în Gravity Forms, cum ar fi numărul de valori pe care le are fiecare câmp - să iterăm prin ele și să verificăm dacă fiecare are o valoare setată, înainte de a returna un string formatat cu fiecare valoare selectată separată prin virgulă.
Poate că Gravity Forms are deja o soluție pre-existentă pentru această problemă - totuși nu există nimic în documentație - orice sugestii sunt binevenite!

Dacă aveți obiectul formularului/câmpului, puteți obține un șir de caractere separat prin virgule care conține opțiunile selectate ale câmpului folosind metoda GF_Field::get_value_export(), care a fost adăugată în Gravity Forms 1.9.13.
Dacă intenționați să o utilizați doar pentru unul sau două câmpuri, puteți face astfel:
$field_id = 4;
$field = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';
Codul de mai sus va returna valorile pentru opțiunile selectate. Dacă doriți să returnați textul opțiunii, trebuie să setați al treilea parametru al get_value_export() la true, de exemplu:
$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : '';
Dacă trebuie să accesați toate valorile câmpurilor din înregistrare, dar doriți ca tipurile de câmpuri relevante să fie formatate pentru a utiliza textul opțiunii, puteți face astfel:
add_action( 'gform_after_submission', function ( $entry, $form ) {
foreach ( $form['fields'] as $field ) {
$field_value = $field->get_value_export( $entry, $field->id, true );
// faceți ceva cu valoarea câmpului.
}
}, 10, 2 );

Acest lucru îmi afișează toate căsuțele de bifare, nu doar cele care sunt bifate și nu există nimic care să distingă cele bifate de cele nebifate. Pe baza a ceea ce căutai și a confirmării răspunsului tău, se pare că ar trebui să afișeze doar căsuțele de bifare, corect?
