El artículo de hoy trata sobre un tema avanzado en el desarrollo de WordPress y está escrito por un invitado distinguido y un desarrollador y educador de WordPress verdaderamente notable: Carl Alexander. C

ARL es un desarrollador de PHP en Montreal, Canadá, quien comparte su pasión por los temas de programación avanzados en su sitio web, Carlalexander.ca, donde publica artículos regularmente. Carl es un orador ordinario de WordCamp, es un organizador de WordPress de WordPress 2010 y ayuda a organizar otros eventos de WordPress durante el año. También es el autor de Learn Object-Oried Programming usando WordPress. Puedes encontrarlo en Twitter y Github.
Todo esto nos pasó en algún momento. Completamos un formulario en una aplicación web. Vamos a enviar, y luego vemos esto, directamente desde la pesadilla de un experto en uso web: el cuadro de advertencia de Infama “¡Confirme la forma del formulario”! Todos odian ver esta advertencia. ¿Por qué está ahí? ¿Por qué no me envías el formulario, navegador web? Por Ceyyyyy? También es común ver la advertencia “confirmar la forma de la forma” en muchas páginas de la administración de complementos. Esto se debe a que la mayoría de los desarrolladores de WordPress no usan la configuración de API. Es una de las API de WordPress más populares (¡si no menos importantes!) Y pocos desarrolladores lo usan. Pero evita este problema.
Entonces, ¿cómo puede crear una página de administración de WordPress sin hacer que aparezca esta horrible advertencia?Mediante el uso del modelo Post/Redirect/Get.Este también es un modelo que puede usar con WordPress.¡Veamos cómo puedes hacerlo!¿Por qué recibe una advertencia “confirmar la forma del formulario”?Primero, investigemos por qué aparece esta advertencia.Después de todo, ¡existe una advertencia de reenviar la forma por una razón!¿Por qué tu navegador web te hace tan duro?Imaginemos que está en la página de finalización del pedido en un sitio de comercio electrónico.Ingrese toda su información personal y luego haga clic en el botón “Comprar”.Su navegador web enviará el formulario a la plataforma de comercio electrónico y responderá con una página exitosa.

Arriba hay una tabla de comunicación entre su navegador web y la plataforma de comercio electrónico. Su navegador web envía una solicitud de publicación HTTP, y la plataforma de comercio electrónico responde al contenido de la página exitosa. El problema con hacer las cosas de esta manera es lo que sucede si actualiza la página en su navegador web: actualizar una página hace que el navegador vuelva a enviar la última solicitud que envió. Para nosotros, esto significaría volver a presentar la aplicación posterior con el formulario que usamos para comprar en el sitio de comercio electrónico. Si los desarrolladores del sitio de comercio electrónico no han hecho bien su trabajo, esto puede causar problemas, lo más obvio es que comprará todo por segunda vez. (¡Lo que no consideró cuando actualiza la página! El modelo Post/Redirect/Get es una forma en que los desarrolladores han encontrado para evitar este problema. Se asegura que la última solicitud en su navegador web no sea una solicitud posterior. Haga esto utilizando una serie específica de solicitudes y respuestas HTTP.
Aquí hay un diagrama para mostrar lo que sucede al usar el modelo Post/Redirect/Get.Su navegador web todavía está enviando una solicitud de publicación HTTP como lo hizo anteriormente.La diferencia es la respuesta de la plataforma de comercio electrónico.El comercio electrónico no responde al contenido de la página exitosa como lo hizo antes.En cambio, responde con un código de estado de redirección.(Para ser más específico, debe responder con un código de estado 303.) Esto le dice al navegador dónde ir para obtener el contenido de la página exitosa.

Su navegador hará una solicitud GETA basada en el encabezado de ubicación en la respuesta de redirección. Esto se hará cargo del contenido de la página exitosa. Pero ahora, debido a que la última solicitud fue una solicitud de Geta, puede actualizar la página sin recibir una advertencia. (¡Huzzah!) Nuestra página de administración inicial para imaginar que ya tenemos una página de administración de WordPress para un complemento en el que estamos trabajando. Tiene un formulario que enviamos para actualizar su configuración. Así es como se ve: /*** Registre la página de administrador del complemento. */ function myplus_create_admin_page () {add_men_page (‘mi página administradora de complementos’, ‘mi página administradora de complemento’, ‘edit_posts’, ‘myPlogin_admin_page’, ‘myplin_display_admin_); } add_action (‘admin_men’, ‘myPLOGIN_CREATE_ADMIN_PAGE’); /*** Página de administración de visualización del complemento. */ function myplus_display_admin_page () {if (isset ($ _ post [‘myplogin_option’)) {update_option (‘myPLOGIN_OPTION’, $ _POST [‘myPLOGIN_OPTION’); } $ opción = get_option (‘myPLOGIN_OPTION’, ”); ? Value = “”>
<? Php} Hay dos funciones en el ejemplo del código anterior. El primero es la función myPLOGIN_CREATE_ADMIN_PAGE. Registre nuestra página de administración de complementos utilizando la función add_men_page.
La función myplugin_display_admin_page es responsable de mostrar nuestra página de administración de complementos.Comienza por verificar si envié el formulario buscando la clave myPLOGIN_OPTION en $ _post superglobal.Si hay un valor establecido en la matriz $ _post, ahorra el valor como una nueva opción de complemento.Después de eso, podemos tomar la opción usando get_option y atribuirla a la opción variable.También usaremos una cadena vacía como valor predeterminado.Luego eliminaremos el código HTML de nuestro formulario con el valor de las opciones como el valor del cuadro de texto.Cuando enviemos este formulario, mostrará el formulario nuevamente después de guardar el valor.Pero, si intenta actualizar, recibirá el error "Confirmar el formulario del formulario", que le advierte que está a punto de enviar los mismos datos del formulario por segunda vez.
Usando el modelo Post/Redirect/Get con WordPress como mencioné anteriormente, si usa la API de configuración, todo se hace por usted de forma predeterminada. Pero nuestro formulario no usa la configuración de API. Entonces, ¿cómo lo convertimos para usar el modelo Post/Redirect/Get? Agregando una redirección bien, podríamos agregar la redirección incluso a la función mypluin_display_admin_page. Algo como: /*** Página de administración de visualización de complementos. */ function myplus_display_admin_page () {if (isset ($ _ post ['myplogin_option')) {update_option ('myPLOGIN_OPTION', $ _POST ['myPLOGIN_OPTION'); Wp_redirect (menú_page_url ('myPLOGIN_Admin_page', falso), 303); salida; } // …} Agregamos una llamada a la función wp_redirect en nuestra instrucción IF. Le ofrecemos el valor devuelto de la función menú_page_url. Esta es una función de ayuda útil para generar las URL de las páginas de administración. Por defecto, la URL eco, por lo que tenemos que enviarlo falso como el segundo argumento para evitar esto. En el caso de redireccionamientos, siempre debe llamar a la función de salida. Esto termina el script y envía el encabezado de redirección al navegador. Esto es lo que le dice al navegador que realice la redirección. Ahora, hay un gran problema al tratar de implementar el modelo Post/Redirect/Get de esta manera: a excepción de los casos raros, no funcionará. (¡Sí, te engañé!) En lugar de una redirección, lo que verás es una advertencia de PHP de que los encabezados ya han sido enviados. Admin_post gancho Entonces, ¿qué puedes hacer a cambio? Bueno, hay un gancho poco conocido que podemos usar. Lo llamamos el gancho admin_post.

Es un gancho que WordPress requiere al enviar una solicitud a la página WP-Admin/Admin-Post.php. Cuando WordPress reciba una solicitud a esta página, buscará el parámetro de acción. Si hay uno, WordPress llamará a Hook- Admin_post_ $ Action. Esto puede parecer confundido, pero será más fácil de entender una vez que actualicemos nuestro ejemplo. Usando el registro de página Admin_post /*** Plugin Admin. */ function myplus_create_admin_page () {add_men_page (‘mi página administradora de complementos’, ‘mi página administradora de complemento’, ‘edit_posts’, ‘myPlogin_admin_page’, ‘myplin_display_admin_); } add_action (‘admin_men’, ‘myPLOGIN_CREATE_ADMIN_PAGE’); /*** Actualiza nuestras opciones de complemento cuando enviamos el formulario a Admin-Post.php. */ function myplus_admin_update_options () {if (isset ($ _ post [‘myplogin_option’)) {update_option (‘myPLOGIN_OPTION’, $ _POST [‘myPLOGIN_OPTION’)); } wp_redirect (admin_url (‘admin.php? page = myPLOGIN_Admin_page’), 303); } add_action (‘admin_post_myplogin_update_options’, ‘myPLOGIN_ADMIN_UPDATE_OPTIONS’); Function myplugin_display_admin_page () {$ option = get_option (‘myPLOGIN_OPTION’, ”); ? “> Opción: <input type =" text "name =" myPLOGIN_OPTION "Value =" <? Php} Esto es lo que parece nuestro ejemplo actualizado. Tenemos una nueva característica llamada myPLOGIN_Admin que tenía en la función myplus_dissplay_admin_page.
El código en cuestión es la instrucción IF que usé para verificar si envié el formulario. Verificamos si la clave myPLOGIN_OPTION está en $ _post superglobal. Y actualice la opción si es así. La función myplugin_admin_update_options usa el gancho de publicación de administrador del que acabamos de hablar. Pero, ¿por qué se llama gancho admin_post_myplugin_update_options? Esto está volviendo a la forma en que dije que el gancho de la publicación administrativa ha funcionado. Es una combinación del prefijo admin_post_ y el parámetro de acción. Para nuestra forma, el parámetro de acción proviene de un campo oculto en nuestra forma. Y contiene el valor de myPLOGIN_UPDATE_OPTIONS. También cambié el formulario para enviar el formulario a Admin-Post.php. Y, para hacer esto, utilicé la función Admin_URL para generar URL Admin-Post.php. Este es un método que puede usar para generar URL para el administrador de WordPress. También usamos la función Admin_url de la función MyPlugin_admin_Update_options para generar la URL de redirección. Esto se debe a que la función menú_page_url no funcionaría con el gancho de publicación de administrador: no agregamos nuestra página de administrador en ese momento, por lo que nos daría un error. ¡Y así lo haces! Con esto, ahora tenemos un formulario que usa el modelo Post/Redirect/Get. (¡Sí!) La clave fue el uso de este gancho de publicación de administrador sobre el cual muchos de nosotros no sabemos. De hecho, es la herramienta que WordPress ha puesto a disposición para hacerlo. Nos permite implementar el modelo sin demasiados dolores de cabeza. Por supuesto, necesitamos dividir nuestro código en varias funciones. ¡Pero esta bien!
Una función es responsable de mostrar el formulario.El otro está a cargo de actualizar la opción en WordPress.El resultado es que hicimos que nuestro código fuera más concentrado y menos propenso a los errores.¡Estas son siempre cosas para las que debemos luchar!Recursos adicionales Este artículo es una publicación que sigue: https://wshout.com/make-wordpress-admin-ptions-without-using-settings-api/ Obtenga más información sobre el desbordamiento de la pila de sujetos. Nuestros grandes partidos para Carl por esto ¡artículo!Por favor, consulte su escrito en Carlalexander.ca: es uno de los mejores educadores de WordPress que escribe en este momento.Y recomendamos firmemente su libro, Aprenda programación orientada a objetos usando WordPress.¡Hasta la próxima!
Prevención del retiro de retiro de los formularios de WordPress con el modelo Post/Redirect/Get
Tags Prevención del retiro de retiro de los formularios de WordPress con el modelo Post/Redirect/Get
homefinance blog