Avisos de administración de WordPress persistentes Parte 2

En la primera parte de esta serie, aprendimos cómo implementar un aviso de administrador básico que aparece en la parte superior de cada página de administrador de WordPress. En este tutorial, comenzaremos a crear un complemento para contener todo nuestro código de aviso de administrador personalizado.

Comenzaremos implementando avisos de administración estándar y los utilizaremos como base para ejemplos más flexibles y avanzados..

Configurando nuestro complemento

Primero, sin embargo, vamos a configurar un nuevo complemento desde cero que usaremos para todos nuestros avisos de administración para que podamos comenzar a ingresar el código.

Supondré aquí que ya tiene configurado un sitio de desarrollo de WP local. Si no es así, vuelva a consultar los enlaces en la parte uno de esta serie de tutoriales..

Crear una nueva carpeta de plugin llamada admin_notices dentro / wp-content / plugins /, y luego crear una admin_notices.php archivo que será el archivo principal del plugin.

Abrir admin_notices.php en su editor favorito y agregue la estructura básica del plugin:

en eso();

Agregamos un encabezado de complemento básico para que WordPress reconozca nuestro complemento. A esto le sigue una clase que contendrá métodos para mostrar nuestros avisos de administración..

Llamé a la clase Gwyer_Admin_Notices para tratar de hacerlo lo más único posible. De esta manera, es mucho menos probable que entren en conflicto con un nombre de clase existente.

Comencemos por mostrar un aviso de administrador básico y luego agregarlo para hacerlo más útil. Para crear un aviso de administrador, agregue el admin_notices enganchar a la en eso() función:

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

El gancho incluye un test_notice Función de devolución de llamada que se utilizará para generar el marcado de notificación de administrador.

Agregue el siguiente método de clase a Gwyer_Admin_Notices para mostrar el aviso de administrador real. Para los mensajes, usaremos citas de películas clásicas de los últimos 100 años de películas..

/ ** * Salida de un aviso de administrador de prueba. * / public function test_notice () ?> 

Yoo hoo, gran soplo de verano.

Activa el plugin para mostrar el aviso de prueba..

También agreguemos ejemplos de los otros tipos de aviso de administrador que podemos mostrar, incluido el tipo descartable, agregando el es-descartable Clase CSS Añadir estos a la test_notice () Método debajo del aviso de administrador existente div:

Toto, tengo la sensación de que ya no estamos en Kansas.

Me tuviste en "hola".

De todas las articulaciones de ginebra en todas las ciudades del mundo, ella entra en la mía..

Nadie pone al bebé en la esquina.

Esta es la gama completa de tipos de avisos de administrador que podemos mostrar a través de las clases de CSS principales de WordPress. Sin embargo, recuerde que el aviso de administrador descartable reaparecerá en cada carga de página.!

En este contexto, el aviso de administrador 'Desechable' significa solo para la página actual. Tener avisos de administrador persistentes no es muy flexible, por lo que más adelante veremos específicamente las diferentes maneras en que puede descartar sus avisos de administrador de manera efectiva.

Avisos de administrador ganchos

Hasta ahora, solo hemos usado el admin_notice gancho para implementar un aviso de administrador. De hecho, hay cuatro enlaces de notificación de administrador que puede usar para mostrar notificaciones, pero admin_notice es el más usado.

Los cuatro ganchos disponibles son:

  • admin_notices (usado en la mayoría de las circunstancias)
  • network_admin_notices
  • all_admin_notices*
  • user_admin_notices*

*Actualmente no hay documentación oficial disponible para estos ganchos..

Entonces, ¿dónde usaría típicamente all_admin_notices, user_admin_notices, y network_admin_notices? ¿Y en qué se diferencian de admin_notices?

Dije anteriormente que el admin_notices El gancho muestra notificaciones en todas las páginas de administración, pero esto no es estrictamente cierto. Si echas un vistazo a admin-header.php en el núcleo de WordPress, verás que admin_notices, network_admin_notices, y user_admin_notices Son mutuamente excluyentes. Es decir, solo uno de estos ganchos se dispara en una página de administración de WordPress.

Una serie de expresiones condicionales evalúa la página de administración actual y dispara solo una de ellas según el tipo de página de administración en la que se encuentre actualmente..

en primer lugar, is_network_admin () comprueba si está en una pantalla de administración de red (por ejemplo, cualquier página de administración basada en un / wp-admin / network / URL). Si es así, el network_admin_notices fuegos de gancho.

De otra manera, is_user_admin () comprueba si está en la pantalla de administración de un usuario (por ejemplo, cualquier página de administración basada en un / wp-admin / usuario / URL). Si es así, el user_admin_notices fuegos de gancho. 

Y, como habrás adivinado, si ambos is_network_admin ()is_user_admin () devuelve falso entonces el admin_notices fuegos de gancho.

Eso solo deja el all_admin_notices gancho. Este enlace no es parte de la expresión condicional que se explicó anteriormente, por lo que se garantiza que este enlace se mostrará en todos páginas de administración sin importar qué, incluyendo páginas de administración de red de múltiples sitios.

Para aclarar, para cualquier página de administrador de WordPress, solo el all_admin_notices El gancho está garantizado para disparar siempre. Fuera de los otros tres ganchos, solo uno se disparará dependiendo de la página de administración en la que se encuentre actualmente.

Te animo a que eches un vistazo a admin-header.php (hacia el final del archivo) para ver cómo WordPress evalúa cuándo usar cada enlace de administración.

Solo estaremos usando admin_notices a lo largo de esta serie de tutoriales, pero es posible que necesite algunos de los otros ganchos en su propio proyecto, por lo que vale la pena echarles un vistazo.

Visualización de avisos de administrador en páginas específicas

Volvamos nuestra atención ahora a mostrar avisos de administración en páginas específicas. Primero, comenta la llamada a add_action por lo que nuestros avisos de prueba ya no se muestran.

Dentro en eso(), añadir un nuevo add_action () llamada que utilizaremos para mostrar un aviso de administrador en una página de administración específica.

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

Luego define el specific_admin_page () método de la siguiente manera:

/ ** * Muestra un aviso de administrador en una pantalla de administrador específica. * / public function specific_admin_page () $ admin_page = get_current_screen (); ?> 

Información: Actualmente estamos en la base; ?> Página de administrador.

Guarde sus cambios y vea cualquier página en el administrador de WordPress. Voy a probar la página principal del tablero.

Como puede ver, para cualquier página de administración que visite, el nombre (base) de la página se muestra en el aviso de administración.

los get_current_screen () la función devuelve un WP_Screen Objeto con detalles sobre la pantalla de administración actual. La propiedad de objeto particular que nos interesa es WP_Screen-> base, que se evalúa al tipo base de la pantalla actual. Intente cargar diferentes páginas de administración de WordPress para ver para qué valores se devuelven WP_Screen-> base.

Podemos usar el valor base para cargar condicionalmente nuestro aviso de administrador solo en la página del panel. El valor que necesitamos verificar es tablero. También mostramos un aviso de administrador alternativo si no estamos en la página del panel de administración. Reemplace su definición de specific_admin_page () con:

/ ** * Muestra un aviso de administrador en una pantalla de administrador específica. * / public function specific_admin_page () $ admin_page = get_current_screen (); if ($ admin_page-> base == "dashboard"):?> 

¡Lo hicimos! Bienvenido al panel de control.

¿Dónde fuiste? Este no es el tablero!

Todo está bien cuando estamos en la página del panel, pero intente navegar a cualquier otra página de administración y vea qué sucede.

El uso de este enfoque simple nos da bastante flexibilidad al mostrar avisos de administración en páginas de administración específicas. Podemos extenderlo fácilmente a la lista blanca de cualquier número de páginas de administración en las que deseamos mostrar los avisos de administración en.

Una vez más, reemplace el specific_admin_pages () Función, esta vez con el siguiente código:

/ ** * Muestra un aviso de administrador en una pantalla de administrador específica. * / public function specific_admin_page () $ whitelist_admin_pages = array ('dashboard', 'upload', 'edit-comments'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

¡Lo hicimos! Este es el 'base; ?> 'página de administración.

¡No en tu nelly! Esta página no está en mi lista.

En lugar de buscar una sola página de administración, ahora verificamos si el nombre base de la página de administración actual se encuentra en el $ whitelist_admin_pages formación. Cuando navegamos al panel de control, la biblioteca de medios o las páginas de administración de comentarios, vemos nuestro exitoso aviso de administración.

Y cuando visitamos alguna En otra página de administración (no incluida en nuestra matriz de lista blanca), vemos un aviso de administrador alternativo..

¿Qué hay de mostrar un aviso de administrador en una página de opciones de plugin? ¿Cómo vamos a hacer eso? Antes de entrar en esto, primero debemos configurar una página de opciones ficticias para nuestro complemento.

Crear un nuevo archivo llamado plugin-opciones.php dentro de avisos de administrador Carpeta de complementos que agregamos anteriormente, y agregamos el siguiente código:

 

Admin Notices Plugin

Introduce algún texto
en eso();

En la cima de admin-notices.php (directamente encima de la declaración de clase), incluya la clase de opciones de complemento en el archivo de complemento principal con:

require_once (dirname (__ FILE__). '/plugin-options.php');

No voy a entrar en demasiados detalles sobre cómo el código en plugin-opciones.php Funciona ya que podría ser todo un tutorial por sí mismo! Si desea una actualización, le recomiendo echar un vistazo a la página de WordPress Codex para agregar páginas de opciones de complementos.

Básicamente, todo lo que estamos haciendo es agregar una nueva. Avisos de administración subpágina a la Ajustes menú. La propia página de opciones de complementos contiene un único campo de texto en el que puede ingresar una cadena. Cuando el Guardar cambios se hace clic en el botón, el contenido del campo de texto se guarda en la base de datos de WordPress.

Este es solo un ejemplo básico de una página de configuración de complementos solo para demostraciones. No incluye las funciones necesarias de desinfección o traducción recomendadas para un complemento de producción destinado a la versión general.

Ir Ajustes> Avisos de administrador para ver la página de opciones de plugin.

Como era de esperar, el aviso de administrador que agregamos anteriormente se muestra en nuestra página de opciones de complementos. El mensaje de error se muestra porque nuestra página de opciones de plugin no está en el $ whitelist_admin_pages array de las páginas de administración permitidas. Vamos a arreglar eso ahora.

Para agregar nuestra página de opciones a la matriz, necesitamos saber el nombre base. Dentro specific_admin_page (), Cambie el error de notificación de administrador div a lo siguiente:

¡No en tu nelly! Esta 'base; ?> 'la página no está en mi lista.

Seguimos recibiendo el mismo aviso de administrador de errores que antes, pero esta vez incluye el nombre base que necesitamos, que resulta ser settings_page_admin-notices / plugin-options. Ese no es un nombre que podríamos haber adivinado fácilmente, por lo que valió la pena tomarse el tiempo para publicarlo!

Agregue el nombre base a la $ whitelist_admin_pages array, que ahora debería verse así:

$ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options', 'dashboard', 'upload', 'edit-comments');

Actualice la página de opciones del complemento para ver el aviso de administración actualizado.

Ahora que conocemos el nombre de la base de la página de opciones del complemento, podemos crear fácilmente un aviso de administrador que solo se muestra en esa página de administrador. retirar settings_page_admin-notices / plugin-options desde el $ whitelist_admin_pages matriz y comentar el segundo add_action función de llamada en en eso(). Luego agregue una tercera acción que usaremos para nuestra página de opciones de complementos solo para el administrador. Tu en eso() La función ahora debería verse así:

/ ** * Registro de ganchos. * / public function init () // add_action ('admin_notices', array ($ this, 'test_notice')); // add_action ('admin_notices', array ($ this, 'specific_admin_page')); add_action ('admin_notices', array ($ this, 'plugin_admin_notice'));  

Vamos a desarrollar la plugin_admin_notice () función de devolución de llamada ahora. Agrega este nuevo método a la Gwyer_Admin_Notices clase:

/ ** * Muestra un aviso de administrador en la página de opciones del complemento. * / public function plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

Bienvenido a la página del complemento de avisos de administración!

Esto es muy similar a specific_admin_page () excepto que hemos eliminado la expresión condicional. También agregamos un botón desechable agregando el es-descartable Clase CSS, por lo que el aviso de administrador ahora también puede cerrarse.


Intente cargar otras páginas de administración para confirmar que el aviso de administración solo se muestra en la página de opciones del complemento.

Conclusión

En este tutorial, aprendimos más sobre los avisos de administración y los diversos enlaces disponibles para mostrarlos. También cubrimos cómo mostrar avisos de administración solo en páginas específicas del administrador de WordPress. Desarrollamos un complemento dedicado para contener todo el código de aviso de administrador personalizado.

En la tercera parte, extenderemos aún más el complemento mostrando cómo activar avisos de administración cuando ocurren ciertos eventos. Recuerde, la naturaleza de código abierto de WordPress hace que sea fácil de aprender y extender. Para ello, tenemos mucho que revisar y estudiar en Envato Market si tiene curiosidad..

Luego, centraremos nuestra atención en descubrir cómo podemos resolver el problema persistente de los avisos de administración para que no vuelvan a aparecer cuando se actualice la página. Implementaremos varios métodos diferentes en nuestro complemento personalizado para permitirnos hacer esto.