Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
Creando un plugin para WordPress

Creando un plugin para WordPress parte 4: Integración con WordPress

 

En esta cuarta entrega vamos a ver cómo integrar nuestro plugin con WordPress. Cuando hablo de integración con WordPress me refiero a que nuestro plugin parezca que forma parte del ecosistema WordPress y cómo interactuar con las funciones propias del CMS.

 

Hooks: Action y Filters

WordPress dispone de Hooks (ganchos). Los Hooks son puntos dentro de las funciones o los templates de WordPress que nos permiten agregar nuestro propio código o modificar el comportamiento por defecto sin necesidad de tocar los archivos del core de WordPress. Los hay de dos tipos: Action y Filter

  • Action: Permite ejecutar nuestro propio código en un lugar específico dentro de la línea de tiempo de ejecución de WordPress. Es decir, cada vez que cargas la página se van ejecutando en cascada una serie de acciones, y WordPress nos permite inyectar nuestro código en un punto en concreto de esta línea. Puedes ver la línea de ejecución y el orden de los hooks de WordPress aquí.
  • Filter: Los filtros son parecidos. La diferencia es que nos permiten modificar un valor de una función y retornar ese valor modificado. Por ejemplo el filtro the_content nos permite coger ese valor, añadir o modificar algo y devolver ese valor modificado a la función original para que siga su curso.

 

También podemos crear nuestros propios Hooks. Si incluyes Hooks en tu plugin estarás dando libertad a un usuario que lo utilice para poder modificarlo y adaptarlo a sus necesidades sin necesidad de modificar el código fuente o crear su propio fork:

Con do_action() hemos creado ese punto de acceso dentro de nuestra función, y un usuario podría crear dentro del functions.php del tema o a través de otro plugin propio que extienda o modifique la funcionalidad del primero, su propia función que llame a ese Hook e interactúe con él:

 

Menús

Si tu plugin necesita de un área de administración y/o configuración en el back-end, WordPress pone a nuestra disposición una serie de funciones que nos permiten una perfecta integración: lo que decía antes, que nuestro plugin parezca que forma parte del propio WordPress.

  • Menús de primer nivel: con la función add_menu_page() podemos crear un menú lateral del primer nivel y ponerle el nombre que queramos, definir su icono, establecer qué roles de usuario tienen acceso a él, etc… Más información aquí.
  • Menús de segundo nivel: con la función add_submenu_page() podemos crear un elemento de menú de segundo nivel, dentro de una sección principal ya existente. Además disponemos de funciones concretas para agregar un elemento de segundo nivel dentro de los menús de escritorio, entradas, páginas, ajustes, herramientas, etc.. (add_dashboard_page(), add_posts_page(), add_media_page(), add_links_page(), add_pages_page(), add_comments_page(), add_theme_page(), add_plugins_page(), add_users_page(), add_management_page() ,add_options_page()). Más información aquí.

 

Con estas dos funciones obtendremos una perfecta integración del acceso a nuestro plugin en la navegación del back-end de WordPress.

 

Options/Settings API

Muy recomendable que eches un vistazo a estas APIs de WordPress que te permiten crear rápidamente páginas de configuración y/o ajustes para tu plugin. Entre otras cosas:

  • Consistencia visual
  • Robustez y mantenibilidad
  • ¡Menos trabajo!
    • Maneja el envío de formularios
    • Gestiona la persistencia de datos
    • Nonces automáticos
    • Sanitización

 

Más información aquí.

 

Manejo de información

En la medida de lo posible evita crear tablas nuevas o un modelo de datos nuevo. El modelo de datos de WordPress es muy flexible y te permite agregar nuevos tipos de datos (Custom Post Type) y añadir cualquier tipo de información adicional (Custom Fields) a ese tipo de datos.

Un ejemplo muy básico: Imagina que quieres crear una sección “Productos” donde aparecerá un listado de productos y cada producto tiene una imagen, un nombre, un precio y una talla. Podrías Registrar un Custom Post Type para lo básico (nombre, descripción, imagen destacada) y añadirle dos Custom Fields (precio y talla) sin necesidad de crear tablas nuevas. Recuerda: ¡No reinventes la rueda!

Por último ten en cuenta que WordPress es universal, y que tu plugin puede ser usado por un inglés, un italiano o un filipino. Es importante al menos que dejes tu plugin preparado para la internacionalización (i18n). Localiza cualquier cadena de texto literal de tu plugin (títulos, nombres, slugs, mensajes, cadenas de texto, etc). No hace falta que traduzcas el plugin a todos los idiomas, pero al menos que el plugin esté preparado para permitir a un usuario de otro idioma trabajarse la traducción a su lengua.

Puede que también te interese

Cómo crear una página de error de acceso a base de datos personalizada
Cómo crear una página de error de acceso a base de datos personalizada
En alguna ocasión nos podemos encontrar con un error de acceso a la base de datos por diversos motivos, y en estos casos nos aparece…
Cómo añadir campos personalizados o custom fields al back-end de WordPress de forma elegante
Cómo añadir campos personalizados o custom fields al back-end de WordPress de forma elegante
En esta entrada vamos a ver como añadir campos personalizados o custom fields al back-end de WordPress de manera elegante, es decir, utilizando meta_boxes. Actualmente…
Mejora la puntuación de Google PageSpeed Insights: Eliminar el CSS que bloquea la visualización del contenido de la mitad superior de la página
Mejora la puntuación de Google PageSpeed Insights: Eliminar el CSS que bloquea la visualización del contenido de la mitad superior de la página
1. Optimizar imágenes 2. Minificar CSS y JS 3. Especificar caché de navegador 4. Habilita la compresión 5. Reducir el tiempo de respuesta del servidor…
WordPress Hooks: Actions
WordPress Hooks: Actions
Si estás familiarizado con WordPress, probablemente hayas oído hablar de los hooks, pero… ¿qué son o para qué sirven? Los hooks de WordPress podrían definirse…