Avisos de administración de WordPress persistentes Parte 3

Bienvenido de nuevo a nuestra serie sobre avisos de administración de WordPress persistentes. Ahora estamos en una buena posición para poder extender nuestra funcionalidad y control de notificación de administrador cuando aparecen en la página.

Después de eso, pasaremos a los avisos de administración persistentes y veremos cómo puede asegurarse de que se despachen de tal manera que no vuelvan a aparecer cuando se vuelven a cargar las páginas de administración.. 

Esto es particularmente importante ya que los avisos de administración personalizados implementados en complementos y temas solo son realmente útiles cuando se pueden descartar de forma permanente. No es suficiente simplemente añadir el es-descartable Clase CSS.

Controlar cuándo aparecen las notificaciones del administrador

Hasta ahora, todos los avisos de administración se han mostrado tan pronto como se carga la página. Puede haber ocasiones en que esto sea inconveniente y desee que se muestre el aviso de administrador después un cierto evento se ha activado en su lugar.

¿Qué tal si quisiéramos que se mostrara un aviso de administrador personalizado en la página de opciones de complementos que creamos anteriormente, pero solamente después de la Guardar cambios se hizo clic en el botón?

Ya sabemos por la segunda parte cómo restringir un aviso de administrador a la página de opciones del complemento. Veamos cómo podemos hacer que aparezca después de que se hayan guardado las opciones del complemento..

Comience por comentar el add_action función de llamada para plugin_admin_notice. Luego, agregue un cuarto add_action llamar en eso como sigue:

add_action ('admin_notices', array ($ this, 'conditional_plugin_admin_notice'));

Cada vez que se guardan las opciones de plugin, Ajustes actualizan valor de cierto Se agrega a lo super global. $ _GET variable de matriz. Podemos usar esto para determinar si necesitamos mostrar nuestro aviso de administrador.

Añadir un nuevo conditional_plugin_admin_notice método para Gwyer_Admin_Notices que produce el valor de $ _GET a la pantalla.

/ ** * Enviar un aviso de administrador en la página de opciones del complemento cuando se hayan guardado los ajustes. * / public function conditional_plugin_admin_notice () echo "
"; print_r ($ _ GET); echo"
";

Cuando la página de opciones del complemento se carga normalmente, no vemos un valor establecido para la configuración actualizada.

Ahora ingrese un texto en el Introduce algún texto campo y haga clic Guardar cambios. Esta vez, vemos Ajustes actualizan ajustado a cierto, que podemos hacer buen uso.

Reemplace la conditional_plugin_admin_notice con:

/ ** * Enviar un aviso de administrador en la página de opciones del complemento cuando se hayan guardado los ajustes. * / public function conditional_plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); $ current_user = wp_get_current_user (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages) && isset ($ _GET ['settings-updated']) && $ _GET ['settings-updated']):?> 

Opciones de plugin recién guardadas. nombre para mostrar; ?>, eres tan increíble!

Por ahora, este código debería parecerte familiar. Sin embargo, se han agregado un par de características nuevas. En primer lugar, la expresión condicional se ha extendido para probar la presencia de configuración-actualización. Ahora, el aviso de administrador solo se mostrará si estamos en la página de opciones del complemento y Si Ajustes actualizan se establece en cierto.

Además, el nombre para mostrar del usuario actual se imprime para hacer que el aviso del administrador sea un poco más personal.

los wp_get_current_user () La función devuelve información sobre el usuario que ha iniciado sesión actualmente. Este objeto se almacena en $ current_user y contiene detalles como el correo electrónico del usuario, la ID, el nombre, el apellido y el nombre para mostrar, que es la propiedad particular en la que estamos interesados.

Finalmente, para un poco más de pulido, hemos evitado que se muestre el aviso de administrador predeterminado, por lo que nuestro personalizado es el único visible para el usuario. Para lograr esto, solo agregamos una sola línea de código a conditional_plugin_admin_notice () para generar CSS para ocultar el aviso de administrador no deseado.

eco "";

El resultado final cuando se guardan las opciones del complemento se muestra a continuación.

Si bien esto funciona bien para propósitos de demostración, un enfoque mejor (y más limpio) sería agregar estilos a una hoja de estilo por separado y ponerlo en la cola solo en la página de opciones del complemento.

Nuestro aviso de administrador personalizado podría extenderse aún más de varias maneras. Una posibilidad podría ser mantener un registro que almacene la fecha / hora actual junto con la información del usuario cada vez que se guardan las opciones del complemento..

¿O qué tal si obtenemos el aviso de administrador para mostrar cuántas veces se han guardado las opciones del complemento ese día, semana, mes, etc.? Estoy seguro de que puedes pensar en más ejemplos también!

Descartar avisos de administración persistentes con eficacia

Es hora de ensuciarnos las manos ahora y profundizar en un código más profundo a medida que centramos nuestra atención en descartar los avisos de administración persistentes. Hasta ahora, la única forma en que hemos visto cómo hacer esto es agregar el .es-descartable Clase de CSS a nuestro administrador div contenedor div. Esto descarta el aviso de administrador para la página actual, pero no es de mucha utilidad en la práctica, ya que reaparece cuando se recarga una página de administrador.

Entonces, ¿cómo podemos arreglar esto? Veremos varios métodos diferentes para descartar los avisos de administración persistentes, que incluyen:

  • Aviso único de administrador que desaparece después de una vista.
  • Un contador de avisos de administrador que desaparece después de un cierto número de vistas..
  • Nota de administración pegajosa que permanece descartada al actualizar la página.
  • Despido por acción personalizada (aviso de administración eliminado después de que se haya completado una acción específica).

Antes de comenzar a implementar cada uno de estos ejemplos, asegúrese de que todos add_action () llama en Gwyer_Admin_Notices :: init () Se han comentado. Luego agrega un nuevo destituible-admin-avisos.php archivo a la admin_notices carpeta de complementos. Abre este nuevo archivo y agrega una nueva definición de clase:

en eso();

En admin_notices.php, Agrega otro requerir una vez() Llame para importar nuestra nueva clase:

require_once (dirname (__ FILE__). '/dismissible-admin-notices.php');

los Gwyer_Dismissible_Admin_Notices clase contendrá todo el código relacionado con descartar avisos de administración persistentes.

Aviso único de administrador

El primer método que veremos es cómo mostrar un aviso de administrador solo una vez para que no vuelva a aparecer en la carga de la página. Puede usar este método para notificar a un usuario cuando se acaba de activar un complemento o tema.

Vamos a hacer esto para nuestro complemento de avisos de administración. Comenzaremos registrando una opción transitoria de WordPress tras la activación del complemento que está programada para caducar casi de inmediato.

En el Gwyer_Dismissible_Admin_Notices clase, añadir una llamada a register_activation_hook ():

register_activation_hook (plugin_dir_path (__FILE__). 'admin-notices.php', array ($ this, 'set_admin_notice_transient'));

los register_activation_hook () La función requiere que especifique la ruta al archivo principal del complemento, pero actualmente estamos en destituible-admin-avisos.php. Así que no podemos simplemente usar la constante mágica de PHP __EXPEDIENTE__ usamos previamente ya que esto siempre apunta al archivo PHP actual.

En su lugar, tenemos que construir la ruta al archivo principal del complemento utilizando plugin_dir_path (__FILE__). 'admin-notices.php'.

Cuando el complemento Admin Notices está activado, ejecutará el código agregado a un set_admin_notice_transient método de clase, que definiremos a continuación.

función pública set_admin_notice_transient () set_transient ('admin-notice-transient', true, 5); 

Este método crea un nuevo transitorio llamado 'admin-notice-transient' con un valor de cierto, y está configurado para expirar después de cinco segundos.

Hagamos uso de este transitorio mostrando condicionalmente un aviso de administrador si estamos en la página de administración correcta y nuestro transitorio aún existe.

Añadir un nuevo add_action () llamar a en eso().

add_action ('admin_notices', array (& $ this, 'display_admin_notice'));

Luego, agregue el display_admin_notice función de devolución de llamada como un nuevo método de clase:

 función pública display_admin_notice () $ current_user = wp_get_current_user (); $ whitelist_admin_pages = array ('plugins'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages) && get_transient ('admin-notice-transient')):?> 

los Avisos de administración El plugin se acaba de activar. Gracias por su apoyo nombre para mostrar; ?>!

Al igual que en los ejemplos anteriores, el aviso de administración solo se muestra si estamos en una página específica, en este caso, la página principal de complementos de administración. Pero tenemos una condición adicional de que el 'admin-notice-transient' también debe existir, de lo contrario el aviso de administración no se mostrará.

Después de que se emita el aviso de administración, el transitorio se elimina de inmediato, aunque inicialmente lo configuramos para que caduque después de solo cinco segundos. Esto solo asegura que no se mostrará de nuevo. Esto podría ocurrir si un usuario intentara actualizar la página de complementos muy rápidamente. Pero al eliminar deliberadamente lo transitorio, podemos estar seguros de que esto nunca será el caso.

Para probar el código que acabamos de agregar, diríjase a la página principal de complementos y desactive, luego vuelva a activar, el complemento de Avisos para administradores.

La clave aquí es la 'admin-notice-transient' ajuste transitorio Sin esto, el aviso de administración aparecerá cada vez que se cargue la página de complementos (después de que se haya activado el complemento), que no es lo que queremos.

Contador de notificaciones de administrador

El siguiente es un aviso de administrador que solo se mostrará un número determinado de veces, después de lo cual ya no será visible. Además, esta vez no se restringirá a ninguna página de administración en particular.

Antes de comenzar, en el Gwyer_Dismissible_Admin_Notices clase, comenta la register_activation_hook () y add_action () función de llamadas. Ahora configuremos un aviso de administración básico que ampliará la funcionalidad de poco.

Añadir un nuevo add_action () llamar en eso():

add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));

Y luego desarrollar la función de devolución de llamada display_admin_notice_counter ():

función pública display_admin_notice_counter () ?> 

Contador administrador aviso.

Esto mostrará un aviso de administrador estándar que aparecerá en cada página de administrador de WordPress.

Pensemos en lo que tenemos que hacer. Nuestro aviso de administrador debe mostrar un número establecido de veces, y cada vez que aparece un contador interno aumenta en uno. Una vez que se haya alcanzado el límite de contador, el aviso de administrador no debería aparecer nuevamente.

Queremos que el aviso de administración se muestre en cualquier página de administración, por lo que el valor del contador debe persistir entre las cargas de la página. Una buena manera de hacerlo es usar una opción de base de datos para almacenar el valor del contador.

Agregue una propiedad de clase de contador para almacenar el valor límite de contador:

public $ counter_limit = 5;

Esto se utilizará en breve para gestionar cuántas veces aparece el aviso de administrador. Dentro display_admin_notice_counter (), actualiza el código de la siguiente manera:

 función pública display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); ?> 

Este aviso de administración ha sido mostrado veces).

Antes de que se muestre el aviso de administrador, estamos recuperando la opción de contador, y se devuelve un valor predeterminado si aún no existe. Después de que se procesa el aviso de administración, la opción de contador se incrementa en uno y se actualiza. Si no existe, se creará una nueva opción para almacenar el valor actual.

También hemos actualizado la clase CSS para que sea un aviso de administración de información..

Intente visitar varias páginas de administración y vea cómo aumenta el contador cada vez..

los ++$ contador El código es un ejemplo de un operador de pre-incremento. Agrega un valor a $ contador antes de Se guarda en la base de datos. Si utilizamos un operador de incremento posterior (es decir,. $ contador++) entonces el valor de $ contador sería almacenado primero y entonces aumentado, lo que no funcionaría.

Vamos a incorporar $ counter_limit ahora para evitar que el aviso de administrador aparezca muchas veces. Añadir esto a display_admin_notice_counter () debajo de la declaración de $ contador:

if ($ counter> $ this-> counter_limit) return; 

Ahora, una vez que el aviso de administración se haya mostrado cinco veces, no será visible en las páginas de administración posteriores. Sin embargo, podría ser agradable mostrar un mensaje la última vez que aparece el aviso de administración para que el usuario sepa que no volverá a aparecer. Extienda la expresión condicional y envíe un mensaje adicional:

 función pública display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); if ($ counter> $ this-> counter_limit) return;  else if ($ counter == $ this-> counter_limit) $ extra_message = "Es hora de decir adiós ahora."; ?> 

Este aviso de administración ha sido mostrado veces).

Sin embargo, no verá el mensaje si ya superó el límite del contador. Puedes resolver esto temporalmente aumentando la $ counter_limit variable.

Para fines de prueba, sería mejor poder restablecer el límite del contador. Si sabe cómo editar la base de datos, puede ingresar y cambiar la opción directamente, pero puede ser tedioso hacerlo varias veces. Así que vamos a implementar nuestra propia función de reinicio.

Primero, cambio $ counter_limit de regreso 5 y agregar una nueva propiedad de clase:

public $ counter_reset = false;

Entonces dentro en eso() reemplazar

add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));

con

$ this-> reset_counter_check ();

La función de reinicio debe mostrar nuestro aviso de administrador de contador o eliminar el admin_notice_counter opción de base de datos y mostrar un aviso de advertencia de administración en su lugar.

 función pública reset_counter_check () if (! $ this-> counter_reset) add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));  else delete_option ('admin_notice_counter'); ?> 

El contador de avisos de administrador se ha reiniciado Cambio $ counter_reset a falso para iniciar el contador de notificaciones de administrador de nuevo.

Para usar la nueva función de reinicio, simplemente cambie $ counter_reset a cierto y cargar cualquier página de administrador.

Luego cambiarlo de nuevo a falso otra vez.

Nota: Este método podría usarse fácilmente para mostrar un aviso de administrador solo una vez, como hicimos en el ejemplo anterior, pero es un poco más complicado de configurar. Realmente depende de tus requerimientos.

Si todo lo que necesita es un aviso de administrador de un solo uso, entonces el método anterior probablemente se adapte mejor a sus necesidades y sea más rápido de implementar. Pero el método de contador es más flexible y, una vez configurado, es igual de fácil de usar en tus propios proyectos..

Conclusión

Hemos cubierto bastante terreno en la tercera parte de esta serie de tutoriales. Hemos visto cómo controlar cuándo aparecen los avisos de administración en lugar de aparecer siempre tan pronto como una página de administración termina de cargarse. Esto es útil de muchas maneras, pero nuestro ejemplo mostró cómo mostrar un aviso de administrador personalizado después de haber guardado las opciones del complemento.

Luego, pasamos a dos ejemplos distintos de descartar avisos de administración persistentes. Esto le da mucha flexibilidad en la forma en que presenta los avisos de administración al usuario. Y en la siguiente y última parte de esta serie de tutoriales, veremos más formas de descartar los avisos de administración persistentes.

Y, para un poco de diversión, crearemos nuestros propios tipos de aviso de administrador personalizados y agregaremos decoraciones de iconos.