Obtener valores de la cadena de consulta para rellenar campos ocultos en Ninja Forms
He creado una plantilla de página personalizada donde muestro una lista de trabajos disponibles desde la base de datos.
La página que muestra los trabajos se llama jobs
.
Estoy usando el plugin Ninja forms
para añadir un formulario en una página llamada apply.php
, que tiene campos para una solicitud de empleo.
Para cada título de trabajo mostrado en la página de trabajos, quiero que sea un enlace que el usuario pueda hacer clic para aplicar, y ser redirigido a apply.php
, donde puedo capturar el ID del trabajo y guardarlo en un campo oculto en apply.php
.
Esto es para que cuando guarde la solicitud del candidato, pueda asociarla con el trabajo al que aplicó.
Ya he añadido el enlace de esta manera:
?page_id=18&jid=2
donde 18 es el ID de la página de aplicación, la página que contiene el formulario de Ninja Forms.
¿Pero cómo puedo capturar el jid de la cadena de consulta y usarlo en los campos del formulario de Ninja Forms?

Parece que puedes usar la acción ninja_forms_display_init
para llenar un campo.
Para obtener el ID del trabajo desde la URL que mencionaste arriba, puedes usar el arreglo $_GET
.
Adaptando el código de esa página de documentación, algo como esto debería lograr lo que buscas:
function wpse_158000_populate_field($form_id) {
global $ninja_forms_loading;
$job_id_field = 3; //coloca aquí el ID de tu campo oculto
//Cambia el valor con el que se prellena un campo.
$ninja_forms_loading->update_field_value($job_id_field, $_GET['jid']);
}
add_action('ninja_forms_display_init', 'wpse_158000_populate_field');
Su documentación enumera varias otras acciones a las que puedes vincular.
Si prefieres usar URLs más limpias, podrías enlazarte a la acción rewrite_rules_array
y así podrías tener una URL más como http://www.example.com/aplicar/2 donde 2 es el ID del trabajo al que están aplicando y "aplicar" es el slug de tu página de solicitud.
También podrías llevar esto más allá y usar el slug del trabajo en lugar del ID para una URL más amigable, luego obtener el ID de ese trabajo a través del slug y añadir ese ID al valor de tu campo oculto.

Tengo una pregunta, ¿qué significan esos números aterradores en los nombres de las funciones?

Cuando envié el formulario, obtuve este error en la siguiente página: 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
--> esto se refiere a la última línea de la función wpse_158000_poulate_field
¿Alguna idea de por qué ocurre?

La respuesta de @Eric Allen funcionó perfectamente.
Sin embargo, también me puse en contacto con el equipo de Ninjaforms y su solución también funcionó, así que la comparto aquí también.
Me refirieron a este enlace: http://docs.ninjaforms.com/customer/en/portal/articles/1981032-filters-ninja_forms_field?b_id=9172
Adaptándolo a mi problema, la solución fue esta:
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);

Seguía recibiendo un error fatal de no-objeto hasta que probé esta solución. Con AFC, un pequeño ajuste lo arregló todo.
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);
?>
