Elementos esenciales para crear un plugin en WordPress

Elementos necesarios cuando creamos un plugin en WordPress

Este artículo pretende ser una guía elemental para la creación de plugins tal como aparece en la documentación de WordPress y traducida al castellano, un recurso para tener a mano cuando queramos crear un plugin. Si te interesa puedes visitar los siguientes artículos de esta serie:
elementos esenciales de seguridad para tu plugin
Cómo traducir nuestro plugin de WordPress (o tema)

Qué elementos necesitamos para que un plugin de WordPress esté operativo

Para que un plugin funcione en WordPress tan solo necesitaremos que cuente con un archivo PHP. Y dentro de este un comentario con el nombre del mismo:

<?php

/**
* Plugin Name: El nombre del plugin.
 */

Aparte del nombre del plugin también podremos añadir muchas más información. Como la web del autor, la URL del plugin, la versión, etc.

Solo con esta información ya aparecerá en la sección de plugins, y ya podremos añadir las funciones que necesitemos. Aunque ya sabemos que, si requerimos añadir unas pocas líneas de código, quizá la mejor opción sea usar nuestro archivo functions.php.

Activación y desactivación del plugin

Contamos con un hook de activación que suele usarse para hacer las configuraciones iniciales como añadir valores por defecto o tablas personalizadas de la base de datos:

register_activation_hook(
    __FILE__,
    'pluginprefix_function_to_run'
);

Y una función de desactivación que suele usarse para eliminar elementos temporales:

register_deactivation_hook(
    __FILE__,
    'pluginprefix_function_to_run'
);

Uno de los ejemplos más comunes del hook de activación es refrescar los permalinks cuando el plugin registra uno o varios custom post types:

function pluginprefix_setup_post_type() {

    register_post_type( 'book', ['public' => true ] ); 

} 
add_action( 'init', 'pluginprefix_setup_post_type' );

function pluginprefix_activate() { 

    // Lanza la función que registra nuestro Custom Post Type.
    pluginprefix_setup_post_type(); 

    // Limpia los permalinks una vez que el Custom Post Type se ha registrado.
    flush_rewrite_rules(); 
}
register_activation_hook( __FILE__, 'pluginprefix_activate' );

Por lo tanto, siguiendo el mismo ejemplo, lo correcto sería revertir el proceso al desactivar el plugin:

function pluginprefix_deactivate() {
    //Borra el Post Type para que sus funciones no queden en memoria.
    unregister_post_type( 'book' );

    // Limpia los permalinks.
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'pluginprefix_deactivate' );

Desinstalación del plugin

Al desinstalar nuestro plugin es muy probable que necesitemos realizar algunas acciones como:

  • Borrar tablas personalizadas de la base de datos
  • Eliminar datos de la tabla options
  • Borrar datos temporales
  • Etc

Para esto contamos con 2 métodos diferentes:

Hook

También contamos con un hook para incluir las acciones al desinstalar nuestro plugin. Si no necesitamos añadir mucho código al desinstalar nuestro plugin podremos añadirlo al archivo principal, donde están los hooks de activación y desactivación, para así tener todos los “interruptores” organizaditos en el mismo lugar:

register_uninstall_hook(
    __FILE__,
    'pluginprefix_function_to_run'
);

Archivo de desinstalación

El otro método es mediante la creación del archivo uninstall.php. Si lo añadimos al mismo nivel que el archivo principal (carpeta raíz) y no le cambiamos el nombre, WordPress reconocerá automáticamente que ese archivo contiene todas las funcionalidades a realizar cuando el plugin se desinstale. Es importante que verifiquemos que se está realizando la desinstalación por motivos de seguridad. Esto lo podemos hacer añadiendo unas pocas líneas de código al inicio del archivo:

if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
    die;
}

Ahora te preguntarás qué método usar. Desde mi punto de vista:

  • Hook de desinstalación: Usarlo cuando no necesitamos añadir mucho código y nuestro archivo principal no está sobrecargado
  • Archivo de desinstalación: Usarlo cuando necesitamos añadir bastante código con diferentes finalidades y/o el archivo principal de nuestro plugin está sobrecargado

Mejores prácticas al crear un plugin

Al crear nuestro plugin es importante que tengamos en cuenta una serie de puntos importantes:

  1. Uso de prefijos: Es muy recomendable que usemos prefijos para nuestras funciones, clases y variables, así evitaremos que sobreescriban o sobreescribir otras con el mismo nombre.
  2. Verifica que las entidades no existen: Y es que en PHP tenemos una serie de funciones para verificar que estas entidades no existen previamente:
    • Variables: isset()
    • Functions: function_exists()
    • Classes: class_exists()
    • Constants: defined()
  3. Uso de la POO (Programación Orientada a Objetos): La POO nos permitirá tener nuestro código más organizado y será mucho más complicado que tengamos problemas de duplicación de entidades. Pero bueno, si contamos con un plugin de 4 líneas de código tampoco sería imprescindible.
  4. Organización: Es muy importante que nuestros archivos y carpetas estén bien organizados. Algo a tener muy en cuenta es que la carpeta raíz solo contenga nuestro archivo principal y el de desinstalación (en el caso lo tengamos)
  5. Estructura de carpetas: Una limpia estructura de las carpetas facilitará mucho la vida a los desarrolladores que tengan que hacer algún retoque en el futuro, incluso si somos nosotros.
    Un ejemplo interesante que nos presenta la documentación de WordPress es el siguiente:
    /plugin-name
        plugin-name.php
        uninstall.php
        /languages
        /includes
        /admin
              /js
              /css
              /images
        /public
              /js
              /css
              /images
  6. Carga condicional: el condicional is_admin() nos permite verificar cuándo un usuario está en el panel de control. Es de lo más recomendable usar esté condicional para mostrar (o no) un contenido dependiendo de dónde se encuentre el usuario.

Rutas

Si nuestro plugin cuenta con imágenes, archivos CSS, JavaScript u otro tipo de archivos externos vas a necesitar hacer referencia a la ruta de estos. Para estos casos WordPress nos facilita una serie de funciones y constantes muy útiles:

  • plugins_url()
  • plugin_dir_url()
  • plugin_dir_path()
  • plugin_basename()
  • WP_PLUGIN_DIR  // full path, no trailing slash
  • WP_PLUGIN_URL  // full url, no trailing slash

Deja un comentario

    Explícanos tu proyecto, nos pondremos en contacto contigo brevemente


    contacto@webheroe.com