Wordpress : Que es admin-post.php
WordPress dispone de dos hooks especiales para recibir datos de un formulario:
admin_post
se encarga de procesar datos de forma síncrona. Eso significa que nos tendremos que valer de redirecciones y tendremos que volver a cargar la página.
wp_ajax
por su parte permite procesar los datos de forma asícrona de modo que no será necesario recargar la página pero deberemos hacer uso de JavaScript.
admin_post
admin-post.php
es un archivo en WordPress que permite manejar peticiones POST desde el área de administración. En WordPress, cuando necesitas realizar acciones complejas o procesar datos desde un formulario en el área de administración, generalmente envías esos datos a admin-post.php
. Este archivo maneja la solicitud y luego la redirige al controlador apropiado para procesarla.
Por ejemplo, si tienes un formulario en el panel de administración de WordPress que permite a los usuarios actualizar cierta configuración del sitio, el formulario enviaría los datos a admin-post.php
con una acción específica asociada a ella. Luego, puedes registrar un controlador para esa acción usando la función add_action()
de WordPress, lo que permite procesar los datos recibidos y realizar las acciones necesarias, como actualizar opciones, guardar datos en la base de datos, enviar correos electrónicos, etc.
Usar admin-post.php
es una práctica común en el desarrollo de complementos (plugins) y temas (themes) de WordPress para manejar acciones en el backend de manera segura y eficiente.
ejemplo
<form method="post" action="<?php echo admin_url('admin-post.php') ?>"
class="miformulario1">
<input type="text" name="name" id="name" class="miclasetexto1"
placeholder="Nombre" required>
<input type="hidden" name="action" value="process_form">
<input type="submit" name="submit" class="miclase_boton_enviar1"
value="Enviar Mensaje">
</form>
Creamos una funcion
add_action( 'admin_post_nopriv_process_form', 'send_mail_data' );
add_action( 'admin_post_process_form', 'send_mail_data' );
function send_mail_data() {
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$message = sanitize_textarea_field($_POST['message']);
$adminmail = $email;
$subject = 'Formulario de contacto'; //asunto
$headers[] = 'Content-type: text/plain; charset=utf-8';
$headers[] = 'From: webmaster gamatel-unlock <webmaster@gamatel-unlock.com>';
//Cuerpo del mensaje
$msg = "Nombre: " . $name . "\n";
$msg .= "E-mail: " . $email . "\n\n";
$msg .= "Mensaje: \n\n" . $message . "\n";
$sendmail = wp_mail( $adminmail, $subject, $msg, $headers);
if ( $sendmail ) {
wp_redirect( home_url("/contactenos")."?sent=".$sendmail ); //asumiendo que existe esta url
}
else {
echo "hubo un error";
}
}
Vea tambien:
→ WordPress : admin_post_process_form y admin_post_nopriv_process_form
Fuente : https://chatgpt.com/