Visualización de información de un complemento de WordPress.org en su sitio web

En la primera parte de este artículo, discutimos cómo usar las funciones incorporadas para comunicarse con WordPress.org y recuperar los detalles del complemento.

En este tutorial pondremos la teoría en acción para crear un complemento simple que nos permitirá mostrar detalles de cualquier complemento alojado en WordPress.org en nuestro sitio web de WordPress usando códigos cortos.


Empezando

Supongo que usted es un desarrollador de complementos y conoce los conceptos básicos, pero en caso de duda, le sugiero que lea los siguientes dos artículos:

  • Dos formas de desarrollar complementos de WordPress: programación funcional
  • Dos formas de desarrollar complementos de WordPress: programación orientada a objetos

Que estamos haciendo?

Con este plugin queremos crear un shortcode como [mpi slug = "my-plugin-information" field = "version"] que puede aceptar dos atributos: "slug" y "field", luego, en función de eso, recuperamos y mostramos la información de cualquier complemento alojado en el repositorio de WordPress.org.

Creando la Base del Plugin

Vamos a empezar por crear una carpeta llamada my-plugin-information en tus wp-content / plugins directorio. Dentro de él, crea un archivo llamado my-plugin-info.php y pegue el siguiente código en él:

 

Qué hicimos?

En el código anterior, hemos creado e inicializado nuestra clase de plugin DOT_MyPluginInfo. En su interior se encuentran los bloques generales de cualquier complemento, por ejemplo, el __construir() método.

La función init_my_plugin_info está enganchado a la en eso Acción para que se ejecute después de cargar WordPress pero antes de que se envíen los encabezados. Dentro de la funcion init_my_plugin_info Hemos registrado nuestro shortcode usando el add_shortcode función.

Nota: Para leer más sobre add_shortcode, Echa un vistazo al Codex.

El complemento anterior ahora tiene suficiente código para que WordPress lo reconozca desde el panel del complemento. Si ya ha creado un archivo según las instrucciones, ahora puede visitar el Complementos página y activar este plugin.


Configuración del código corto

Dado que queremos la flexibilidad para elegir qué información queremos mostrar sobre un complemento, creamos un shortcode con dos atributos. La primera llamada "slug" se utilizará para especificar qué datos del complemento se deben recuperar. El segundo atributo "campo" se usará para especificar qué información exacta sobre un complemento necesitamos mostrar.

Entonces, por ejemplo, si queremos mostrar la cantidad de veces que se ha descargado este complemento, simplemente debemos agregar el texto debajo del editor de publicaciones y el resultado final debería ser algo como "Descargado 100 veces".

 Tiempo de descarga [mpi slug = "my-plugin-information" = "descargado"].

Utilizando add_shortcode registramos nuestro shortcode para que cada vez que se encuentre en el contenido de la publicación, la función render_mpi () Será llamado para procesarlo. A partir de ahora, el resto del código se colocará dentro de esta función para manejar nuestro código corto..

Procesando el código corto con render_mpi ()

Para mostrar la información del complemento, primero debemos procesar el código abreviado para obtener los atributos. Agregue el siguiente código dentro de render_api función:

 // obtenga nuestra variable de $ atts extract (shortcode_atts (array ('slug' => ", // foo es un valor predeterminado 'field' =>"), $ atts));

Esto extrae los dos atributos "slug" y "field" si se proporcionan. Antes de seguir adelante, primero verificamos si existen valores para "slug" y "field", y si no, dejamos de seguir procesando.

 / ** * Verificar si existe slug * / if (! $ Slug) return false;  / ** * Comprobar si el campo existe * Valor de retorno basado en el atributo del campo * / if (! $ Field) return false;  else  // $ chequeo de campo

El código anterior verificará si existe "slug", y si no existe, devolverá false. Si "slug" existe, se procederá a verificar el atributo "field". Ya que solo estamos creando un código abreviado para mostrar una información específica sobre un complemento, verificar si ambos atributos existen antes de seguir procesando guardará llamadas innecesarias a la API de complementos de WordPress.org.

Ahora, si los valores para los atributos "slug" y "field" se proporcionan en el código abreviado, procederemos primero a sanear ambos valores..

 // Atributos de desinfección $ slug = sanitize_title ($ slug); $ field = sanitize_title ($ field);

Almacenamiento de datos del complemento en transitorios

Para evitar enviar una solicitud a WordPress.org cada vez que se carga una página que contiene este código abreviado, debemos guardar la información del complemento localmente. De esta manera, si ha colocado más de un código abreviado para mostrar diferentes detalles del mismo complemento, podemos acelerar el proceso mostrando datos de la información guardada localmente en su sitio web..

¿Pero qué pasa si el complemento se actualiza y seguimos mostrando datos antiguos?? Bueno, para solucionarlo, la opción más rápida posible es guardar los datos de nuestro complemento individual utilizando la API de Transients y estableciendo una fecha de caducidad en los datos.

Otro problema sería si tiene códigos cortos que están recuperando datos sobre diferentes complementos. Si los almacenamos con un solo nombre transitorio, el resultado podría ser inesperado. Para abordar esto, le damos un nombre único a los transitorios guardados usando el atributo "slug".

Por qué pasar por todo esto?

  • Para guardar información sobre cada plugin por separado
  • Para hacer menos peticiones a WordPress.org
  • Para cargar datos más rápido sirviéndolos directamente desde su propio sitio web

Vamos a proceder primero creando una variable. $ mpi_transient_name para guardar nombres transitorios únicos basados ​​en el atributo "slug".

 // Crea una matriz vacía con un nombre de variable diferente según la barra de complemento $ mpi_transient_name = 'mpi-'. $ slug;

A continuación comprobamos, si el transitorio ya existe:

 / ** * Compruebe si existen datos transitorios con el complemento * / $ mpi_info = get_transient ($ mpi_transient_name);

Si el transitorio existe, luego procedemos a mostrar datos basados ​​en el atributo "campo" o, de lo contrario, utilizaremos plugins_api para conectarse a WordPress.org y solicitar la información del complemento.

 if (vacío ($ mpi_info)) / ** * Conéctese a WordPress.org usando plugins_api * Acerca de plugins_api - * http://wp.tutsplus.com/tutorials/plugins/communicating-with-the-wordpress-org-plugin -api / * / require_once (ABSPATH. 'wp-admin / includes / plugin-install.php'); $ mpi_info = plugins_api ('plugin_information', array ('slug' => $ slug)); // Compruebe si hay errores con los datos devueltos desde WordPress.org si (! $ Mpi_info o is_wp_error ($ mpi_info)) return false;  // Configure un transitorio con los datos del complemento // Use la API de Opciones con la tarea de actualización automática de cron en la próxima versión. set_transient ($ mpi_transient_name, $ mpi_info, 1 * HOUR_IN_SECONDS); 

En el código anterior, hicimos tres cosas:

  1. Nos conectamos a WordPress.org y solicitamos la información del complemento. La solicitud se guarda en una variable llamada $ mpi_info
  2. Luego realizamos una comprobación de errores para asegurarnos de que los datos se hayan devuelto sin error.
  3. Finalmente creamos un nuevo transitorio con una fecha de vencimiento de una hora.

Ahora si el valor del atributo slug era "my-plugin-information"entonces el nombre del transitorio que almacena la información del complemento sería"mpi-my-plugin-information".

Nota: para aprender más sobre plugins_api Consulte el primer artículo de esta serie, que se muestra en la parte superior de esta publicación..

Visualización de información del complemento

El último paso implica devolver información específica basada en el valor del atributo "campo". Para ello simplemente utilizamos cheques individuales..

 si ($ campo == "descargado") return $ mpi_info-> descargado;  if ($ field == "name") return $ mpi_info-> name;  if ($ field == "slug") return $ mpi_info-> slug;  if ($ field == "version") return $ mpi_info-> version;  if ($ field == "author") return $ mpi_info-> author;  if ($ field == "author_profile") return $ mpi_info-> author_profile;  if ($ field == "last_updated") return $ mpi_info-> last_updated;  if ($ field == "download_link") return $ mpi_info-> download_link; 

Terminando

Código de complemento completo:

 ", // foo es un valor predeterminado 'campo' =>"), $ atts)); / ** * Verificar si existe slug * / if (! $ Slug) return false;  / ** * Comprobar si el campo existe * Valor de retorno basado en el atributo del campo * / if (! $ Field) return false;  else // Atributos de desinfección $ slug = sanitize_title ($ slug); $ field = sanitize_title ($ field); // Cree una matriz vacía con el nombre de la variable diferente en función de la barra de complemento $ mpi_transient_name = 'mpi'. $ slug; / ** * Compruebe si existen datos transitorios con el complemento * / $ mpi_info = get_transient ($ mpi_transient_name); if (vacío ($ mpi_info)) / ** * Conéctese a WordPress.org usando plugins_api * Acerca de plugins_api - * http://wp.tutsplus.com/tutorials/plugins/communicating-with-the-wordpress-org-plugin -api / * / require_once (ABSPATH. 'wp-admin / includes / plugin-install.php'); $ mpi_info = plugins_api ('plugin_information', array ('slug' => $ slug)); // Compruebe si hay errores con los datos devueltos desde WordPress.org si (! $ Mpi_info o is_wp_error ($ mpi_info)) return false;  // Configure un transitorio con los datos del complemento // Use la API de Opciones con la tarea de actualización automática de cron en la próxima versión. set_transient ($ mpi_transient_name, $ mpi_info, 1 * HOUR_IN_SECONDS);  si ($ campo == "descargado") return $ mpi_info-> descargado;  if ($ field == "name") return $ mpi_info-> name;  if ($ field == "slug") return $ mpi_info-> slug;  if ($ field == "version") return $ mpi_info-> version;  if ($ field == "author") return $ mpi_info-> author;  if ($ field == "author_profile") return $ mpi_info-> author_profile;  if ($ field == "last_updated") return $ mpi_info-> last_updated;  if ($ field == "download_link") return $ mpi_info-> download_link;  // $ chequeo de campo // render_mpi () // finalizar la nueva clase DOT_MyPluginInfo (); ?>

Este código de complemento está disponible en GitHub y también puede descargarlo de WordPress.org


Poniéndolo en Acción

Ahora simplemente puede ir a su editor de publicaciones y agregar un shortcode como:

 Tiempo de descarga [mpi slug = "my-plugin-information" = "descargado"].

Y se mostrará:

 Descargado 10 veces.

Ejemplo de código corto para mostrar otra información sobre un complemento

Al reemplazar el valor del atributo "campo", puede mostrar información diferente, como por ejemplo:

  • Nombre del complemento: [mpi slug = "my-plugin-information" field = "name"]
  • Versión del plugin: [mpi slug = "my-plugin-information" field = "version"]
  • Slug Plugin: [mpi slug = "my-plugin-information" field = "slug"]
  • Autor del complemento (devuelve un nombre y enlace): [mpi slug = "my-plugin-information" field = "author"]
  • Perfil del autor (devuelve la dirección del perfil): [mpi slug = "my-plugin-information" field = "author_profile"]
  • Última actualización: [mpi slug = "my-plugin-information" field = "last_updated"]
  • Enlace de descarga: [mpi slug = "my-plugin-information" field = "download_link"]

Mejoras

Para mantener las cosas simples, he usado transitorios para guardar la información del complemento. Sin embargo, los transitorios nunca se utilizaron para guardar datos importantes. Un método alternativo sería guardar los datos del complemento utilizando la API de opciones, add_options (), o como meta de publicación y luego programe una tarea cron para actualizar los datos cada hora.


Qué sigue?

Utilizando plugins_api hemos demostrado lo fácil que es comunicar y recuperar información de cualquier complemento alojado en WordPress.org.

Es posible que también desee ver otros complementos, como Información del complemento (que también utiliza plugins_api, y I Make Plugins, para ver cómo han logrado la misma tarea..