Creación de un plugin para WordPress

Resumen: en este post te voy a mostrar una guía para crear un plugin simple de WordPress. Iré paso a paso, y será un post introductorio con un ejemplo.

Recuerda que la creación de plugins para este CMS es hecha con PHP, así que si sabes PHP solo tienes que saber adaptar tu código a los estándares de WordPress y usar sus funciones.

Lo que veremos es:

  • Creación de un plugin para WordPress
  • Evitar choques de nombres con otros plugins usando clases
  • Creación de definición de plugin en el encabezado
  • Uso de add_filter

Al final dejaré el código fuente de un plugin que inserta contenido cada determinado número de párrafos (por ejemplo, publicidad 😉 )

Requisitos

Una instalación de WordPress activa y funcionando. Recomiendo que sea local por si hay errores.

Encabezado del plugin para WordPress

Para que un plugin sea tomado en cuenta, necesitamos definir un encabezado.

Un encabezado de plugin para WordPress se ve así:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/

Lo que encontramos es:

  • Plugin Name: el nombre del plugin. En mi caso he puesto lo mismo en la descripción, pero el mismo debería tener un nombre corto como “yoast seo” o “ad inserter”
  • Plugin URI: la dirección web del plugin
  • Description: toda la descripción del plugin. Lo que hace, de forma extendida.
  • Version: el número de versión
  • Author: el nombre del autor
  • Author URI: una URI a la web del autor

Aunque parezca raro: sí, WP leerá el encabezado, bueno, el comentario, y tomará los detalles del mismo.

¿En dónde se coloca el Plugin para WordPress?

Para comenzar a desarrollar estos componentes, hay que colocar nuestro código en una carpeta dentro de wp-content/plugins

Puede ser un simple archivo o un directorio; recomiendo crear un directorio.

Evitar el choque de nombres al desarrollar el plugin

Para elegir el nombre de tu plugin, coloca tu nombre o el nombre de tu empresa al inicio, seguido de la descripción.

Yo le he puesto un nombre muy creativo al mío: parzibyte-publicidad

Sé que debería llevar un nombre como “parzibyte-insert” pero bueno, el punto es que lleva mi nombre y que es muy poco probable que se repita.

Hasta el momento se ve así:

Ubicación del plugin para WordPress dentro de instalación de WP

Hola mundo, digo, hola WordPress

Ahora crea el archivo dentro de tu carpeta. Yo le he puesto el mismo nombre.

Agrega el siguiente contenido:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/
defined("ABSPATH") or die("No es permitido el acceso directo al archivo");

Todavía no estamos haciendo nada, apenas llevamos un avance para que no se pueda acceder al plugin directamente.

Es decir, la línea 10 previene que alguien acceda al plugin desde sitio.com/wp-content/plugins/parzibyte-publicidad/parzibyte-publicidad.php pero es accesible cuando es incluido desde el index.

Ahora ve a tu panel de control y luego a Plugins.

El plugin que acabas de crear debería mostrarse:

El plugin de WordPress aparece en el panel de control de WP

Ahora haz click en Activar, no debería pasar nada malo.

Agregando funcionamiento al plugin

Por el momento nuestro plugin no hace nada. Vamos a comenzar agregando nuestra clase y evitando el choque de nombres dentro de PHP.

Porque sí, ya pusimos un nombre único, pero falta elegir funciones o clases únicas.

Para hacer esto, vamos a crear una clase que lleve nuestro nombre y el nombre del plugin. La mía se ve así:

<?php
class ParzibytePublicidad
{
    public static function iniciar()
    {

    }

    public function agregar_publicidad($contenido)
    {
    }

}

Puedo tener múltiples funciones dentro de mi clase, y pueden tener el mismo nombre que las de otros plugins, siempre y cuando no se repita el nombre de mi clase.

WordPress puede incluir nuestro archivo varias veces, y debemos definir nuestra clase solo una vez. Es decir, debemos fijarnos en que nuestra clase no se defina varias veces.

Para saber si una clase está definida, usamos class_exists y nuestro plugin va quedando así:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/
defined("ABSPATH") or die("No es permitido el acceso directo al archivo");

if (!class_exists("ParzibytePublicidad")) {
    class ParzibytePublicidad
    {
        public static function iniciar()
        {
            
        }

        public function agregar_publicidad($contenido)
        {
            
        }

    }
}

Tenemos nuestra clase, que tiene funciones simples de PHP. Todavía no estamos llamando a WP pero lo haremos justo ahora.

Ahora ya podemos comenzar a usar las funciones de WordPress.

Función add_filter de WordPress

WordPress ofrece varias funciones para modificar el contenido. En este caso vamos a agregar un filtro a the_content.

the_content es el contenido de un post, y sirve para modificar el contenido antes de que sea mostrado.

La sintaxis de add_filter para este ejemplo es:

add_filter(nombre_del_filtro, funcion_que_modifica_el_contenido)

Así que:

add_filter("the_content", "ParzibytePublicidad::agregar_publicidad");

La función va a recibir el contenido como HTML, es decir, es la variable que recibe.

Debemos invocar a add_filter en el archivo del plugin. Esa invocación solo debe hacerse una vez.

Veamos el código:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/
defined("ABSPATH") or die("No es permitido el acceso directo al archivo");

if (!class_exists("ParzibytePublicidad")) {
    class ParzibytePublicidad
    {
        public static function iniciar()
        {
            add_filter("the_content", "ParzibytePublicidad::agregar_publicidad");
        }

        public function agregar_publicidad($contenido)
        {
            # Aquí modificar el contenido y regresarlo
            return $contenido
        }

    }
    # Aquí llamamos a la función que agrega el filtro
    ParzibytePublicidad::iniciar();
}

Estamos llamando a iniciar en la línea 28, dentro de esa función se invoca a add_filter. Entonces esta función es la que se encarga de indicar que queremos modificar el contenido.

En la línea 20 estamos listos para modificar el contenido. Es decir, esa función se llamará para que se nos permita modificar el contenido de un post.

Modificando el contenido con el plugin

Dentro de agregar_publicidad vamos a poner lo siguiente, que es muy sencillo:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/
defined("ABSPATH") or die("No es permitido el acceso directo al archivo");
if (!class_exists("ParzibytePublicidad")) {
    class ParzibytePublicidad
    {
        public static function iniciar()
        {
            add_filter("the_content", "ParzibytePublicidad::agregar_publicidad");
        }
        public function agregar_publicidad($contenido)
        {
            if (is_single() && in_the_loop() && is_main_query()) {
                return "<p>Al inicio</p>" . $contenido . "<p>Al final</p>";
            }
            return $contenido;
        }
    }
    ParzibytePublicidad::iniciar();
}

Simplemente estamos agregando un párrafo al inicio y al final del contenido.

Eso lo hacemos solo si es un post, es la primer consulta (porque puede haber varias modificaciones) y si estamos dentro del loop de WP.

Si no se cumplen esas condiciones, entonces regresamos el contenido tal y como está.

Probando el plugin

Si ahora visitas tu web y has activado el plugin, verás lo siguiente:

Plugin de WP funcionando en el post

Nuestro plugin está funcionando.

A partir de aquí puedes hacer modificaciones al contenido usando expresiones regulares y todo eso del trabajo con cadenas en PHP.

Insertando contenido entre párrafos

Ahora sí a lo que venimos. A través de una expresión regular vamos a capturar los párrafos e insertar publicidad entre ellos.

Para hacerlo más interesante haremos que la publicidad se inserte cada 2 párrafos (parámetro que puede ser cambiado) por lo tanto el código queda como se ve a continuación:

<?php
/*
Plugin Name: Insertar publicidad entre párrafos
Plugin URI: https://parzibyte.me/blog
Description: Insertar publicidad entre párrafos
Version: 1.0
Author: Luis Cabrera Benito a.k.a Parzibyte
Author URI: https://parzibyte.me/blog
*/
defined("ABSPATH") or die("No es permitido el acceso directo al archivo");

if (!class_exists("ParzibytePublicidad")) {
    class ParzibytePublicidad
    {
        public static function iniciar()
        {
            add_filter("the_content", "ParzibytePublicidad::agregar_publicidad");
        }

        public function agregar_publicidad($contenido)
        {
            $expresionRegular = '/<p(>|\s+[^>]*>)(.*?)<\/p>/im';
            $publicidad = "<div style='border: 1px solid #8bc34a;font-size:0.7em'>
    <strong>¿Quieres un plugin para WordPress?</strong>
    <p>Visita mi <a href='//parzibyte.me/blog'>página web</a> para hablar ;)</p>
    </div>";
            $expresionRegular = '/<p(>|\s+[^>]*>)(.*?)<\/p>/im';

            if (is_single() && in_the_loop() && is_main_query()) {
                $conteo = 0;
                $ponerPublicidadCada = 2;
                return preg_replace_callback($expresionRegular, function ($coincidencias) use (&$publicidad, &$conteo, $ponerPublicidadCada) {
                    $conteo++;
                    if ($conteo % $ponerPublicidadCada === 0) {
                        return "<p" . $coincidencias[1] . $coincidencias[2] . "</p>" . $publicidad;
                    }
                    return "<p" . $coincidencias[1] . $coincidencias[2] . "</p>";
                }, $contenido);
            }

            return $contenido;
        }

    }

    ParzibytePublicidad::iniciar();
}

No voy a explicar el funcionamiento a detalle, pues ese no es el punto, el punto era ver cómo modificar el contenido de WP a partir de un plugin.

Lo que se hace es tomar los párrafos y remplazar su contenido con una función. Dentro de la función tenemos las coincidencias o grupos de captura en un arreglo .

Tomamos el contenido del párrafo y le adjuntamos la publicidad.

Dentro de la función estamos usando un contador para saber si debemos insertar publicidad. Lo he puesto cada 2 párrafos al final para que saliera la captura completa.

Al final luce así:

Plugin para WordPress en acción

Notas finales

Para resumir:

  • Los plugins van en el directorio wp-content/plugins
  • Hay que elegir nombres de archivos, clases y funciones con un prefijo. Puedes usar únicamente funciones pero recomiendo usar una clase y encapsular todo dentro de la misma
  • Hay varios filtros y acciones de WordPress. Puedes encontrar más información aquí.
  • Si quieres un plugin, puedo desarrollarlo, simplemente contáctame

Espero traer más sobre el desarrollo de plugins para WordPress en próximas entradas. Todavía queda mucho por ver.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *