Cómo manejar un formulario personalizado en WordPress para enviar a otra página
Sé que en PHP puedo simplemente poner action igual a random.php y procesar los datos ahí, pero ¿cómo en WordPress puedo usar una página existente con una plantilla personalizada para enviar un formulario, de modo que después de enviar un formulario en una página, el usuario sea redirigido a otra página en WordPress con todas sus credenciales ingresadas aún disponibles?

<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
<input type="hidden" name="action" value="your_action_name">
Añade esto en tu formulario. Donde admin-post.php procesará tu formulario. En ese caso, basado en el valor de your_action_name que proporciones, se activará un gancho de acción. Por ejemplo, si añades un gancho como el siguiente en el functions.php
de tu tema o en tu plugin:
add_action( 'admin_post_nopriv_your_action_name', 'your_function_to_process_form' );
entonces para usuarios no logueados:
function your_function_to_process_form(){
// procesa tu formulario aquí
}
será llamado. Desde allí puedes procesar tu formulario. Para usuarios logueados necesitas renombrar tu acción a admin_post_your_action_name
en lugar de admin_post_nopriv_your_action_name
. Recuerda que admin_post_
o admin_post_nopriv_
están disponibles en admin-post.php para do_action
de la acción apropiada. Lo que añadas al final de admin_post_nopriv_
o admin_post_
formulará un gancho de acción. Eso necesita ser implementado con add_action()
. Si pasas contactform
como acción oculta, entonces tu gancho de acción será admin_post_nopriv_contactform
o admin_post_contactform
o ambos.

Vaya, muchos pasos. Entiendo todo en tu explicación, excepto una cosa. Entonces, digamos que después del envío del formulario quiero llevar al usuario a una nueva página con otro diseño, ¿cómo lo hago? Porque como dije, en PHP plano pongo otro nombre de archivo en action y simplemente escribo la estructura HTML en ese nuevo archivo. Aquí dices que pongas admin-post.php y especifiques hooks para functions.php. Pero ¿dónde pongo una nueva URL de página con nuevo HTML y estilos para que el usuario sea redirigido?

puedes usar wp_redirect( 'tu ubicación' );
. Ponlo al final de tu función después de haber procesado tu formulario.

function your_function_to_process_form(){ //haz el procesamiento de tu formulario y luego wp_redirect( 'tu ubicación' ); }

Gracias. Solo me pregunto por qué exactamente tiene que hacerse de esta manera. Solo enviando a admin-post.php. Me pregunto por qué a este y no a otro. ¿Es simplemente la forma en que WordPress funciona y maneja formularios personalizados? Me encantaría leer cualquier recurso sobre esto si tienes.

Si queremos duplicar el formulario en otro lugar, la misma acción te ayudará. Y WordPress viene con este archivo que te proporciona el hook apropiado para seguir su naturaleza basada en eventos. Para más información puedes seguir este enlace. Gracias.
