Cum să prelucrezi valori din query string pentru a completa câmpuri ascunse în formularele Ninja Forms
Am creat un șablon de pagină personalizat unde afișez o listă de joburi disponibile din baza de date.
Pagina care afișează joburile se numește jobs
.
Folosesc plugin-ul Ninja forms
pentru a adăuga un formular pe o pagină numită apply.php
, care conține câmpuri pentru aplicarea la job.
Pentru fiecare titlu de job afișat pe pagina jobs, vreau să fie un link pe care utilizatorul să poată face click pentru a aplica și să fie redirecționat către apply.php
, unde pot prelua ID-ul jobului și să-l salvez într-un câmp ascuns pe apply.php
.
Acest lucru este necesar pentru ca atunci când salvez aplicația candidatului, să pot asocia jobul pentru care a aplicat.
Am adăugat link-ul corect - astfel:
?page_id=18&jid=2
unde 18 este ID-ul paginii de aplicare, pagina pe care am plasat formularul Ninja Forms.
Dar cum pot prelua parametrul jid din query string și să-l folosesc în câmpurile formularului Ninja Forms?

Se pare că poți folosi acțiunea ninja_forms_display_init
pentru a popula un câmp.
Pentru a obține ID-ul jobului din URL-ul menționat mai sus, poți folosi array-ul $_GET
.
Adaptând codul de pe pagina respectivă de documentație, ceva de genul acesta ar trebui să realizeze ceea ce cauți:
function wpse_158000_populate_field($form_id) {
global $ninja_forms_loading;
$job_id_field = 3; //introdu aici ID-ul pentru câmpul tău ascuns
//Modifică valoarea cu care este pre-populat un câmp.
$ninja_forms_loading->update_field_value($job_id_field, $_GET['jid']);
}
add_action('ninja_forms_display_init', 'wpse_158000_populate_field');
În documentația lor sunt enumerate o serie de alte acțiuni în care te poți conecta.
Dacă preferi să folosești URL-uri mai curate, poți să te conectezi la acțiunea rewrite_rules_array
și poți avea un URL de genul http://www.example.com/aplica/2, unde 2 este ID-ul jobului pentru care aplică, iar "aplica" este slug-ul paginii tale de aplicare.
Poți merge și mai departe și folosi slug-ul pentru acel job în loc de ID pentru un URL mai frumos, apoi să obții ID-ul pentru acel job prin slug și să adaugi acel ID la valoarea câmpului tău ascuns.

Am o întrebare, ce înseamnă aceste numere înfricoșătoare din numele funcțiilor?

Când am trimis formularul, am primit această eroare pe pagina următoare: Fatal error: Call to a member function update_field_value() on a non-object in C:\xampp\htdocs\xampp\wordpress\wp-content\plugins\custom-query-vars.php on line 38
--> aceasta se referă la ultima linie din funcția wpse_158000_poulate_field
Ai vreo idee de ce?

Răspunsul lui @Eric Allen a funcționat perfect.
Cu toate acestea, am luat legătura și cu echipa de la Ninjaforms, iar răspunsul lor a funcționat de asemenea, așa că îl postez și aici.
Ei m-au trimis la această referință: http://docs.ninjaforms.com/customer/en/portal/articles/1981032-filters-ninja_forms_field?b_id=9172
Adaptând-o la problema mea, soluția a fost următoarea:
function filter_fetch_jid( $data, $field_id ){
if( $field_id == 27 ){
$job_id = $job_id = $_REQUEST['jid'];
$data['default_value'] = $job_id ;
}
return $data;
}
add_filter( 'ninja_forms_field', 'filter_fetch_jid', 10, 27);

Am tot primit o eroare fatală de non-object până când am încercat această soluție. Cu AFC, o mică modificare a rezolvat totul.
function filter_fetch_jid( $data, $field_id ){
if( $field_id == 21 ){ global $post; $agent_email = get_field('email_address', $post->ID); $data['default_value'] = $agent_email ; } return $data; }
add_filter( 'ninja_forms_field', 'filter_fetch_jid', 10, 27);
?>
