Cómo crear un plugin WordPress desde cero

febrero 28, 2026 por admin Desarrollo de Plugins
Como se crea un Plugin en WP paso. a paso

Si ya tienes claro cómo funciona un tema WordPress, el siguiente paso natural es aprender a crear plugins. Un plugin es simplemente un archivo PHP que WordPress carga automáticamente y que puede engancharse al sistema de hooks para añadir, modificar o eliminar comportamientos del núcleo.

En este artículo vamos a crear un plugin desde cero, paso a paso. Sin generadores, sin boilerplates, sin dependencias. Solo PHP y el sistema de hooks de WordPress.

¿Qué es exactamente un plugin?

Un plugin es un paquete de código PHP que WordPress carga automáticamente desde la carpeta wp-content/plugins/. Puede ser un solo archivo o una carpeta con decenas de archivos. La única diferencia entre un plugin de un archivo y uno de cien es la complejidad de lo que hace, no la forma en que WordPress lo carga.

Lo que hace que WordPress reconozca un archivo PHP como plugin es un bloque de comentarios especial al inicio del archivo. Sin ese bloque, WordPress ignora el archivo completamente.

El archivo principal — la cabecera del plugin

Crea una carpeta en wp-content/plugins/ con el nombre de tu plugin. Dentro, crea un archivo PHP con el mismo nombre. En mi caso: mi-plugin/mi-plugin.php.

El contenido mínimo de ese archivo:

<?php
/**
 * Plugin Name:       Mi Plugin
 * Plugin URI:        https://disfrutandodelcamino.com
 * Description:       Descripción breve de lo que hace el plugin.
 * Version:           1.0.0
 * Requires at least: 6.0
 * Requires PHP:      7.4
 * Author:            Alexei Haberli
 * Author URI:        https://disfrutandodelcamino.com
 * License:           GPL v2 or later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       mi-plugin
 */

// Seguridad: evitar acceso directo al archivo
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

Con esto ya tienes un plugin que WordPress reconoce. Ve a Plugins → Plugins instalados y lo verás en la lista. Todavía no hace nada, pero está ahí.

La línea if ( ! defined( 'ABSPATH' ) ) exit; es importante: evita que alguien acceda directamente al archivo PHP desde el navegador saltándose WordPress.


Añadir funcionalidad con hooks

Ahora que WordPress reconoce tu plugin, puedes empezar a añadir funcionalidad. La forma correcta de hacerlo es a través del sistema de hooks — puntos de enganche que WordPress ofrece a lo largo de su ejecución.

Hay dos tipos de hooks:

  • Actions: ejecutan código en un momento específico. Se registran con add_action().
  • Filters: modifican un valor y lo devuelven. Se registran con add_filter().

Un ejemplo práctico — añadir un mensaje en el footer del sitio:

add_action( 'wp_footer', 'mi_plugin_footer_message' );
function mi_plugin_footer_message() {
    echo '<p style="text-align:center;">Hecho con WordPress y mucho café.</p>';
}

Y un ejemplo de filter — modificar el extracto de los posts:

add_filter( 'the_excerpt', 'mi_plugin_modificar_excerpt' );
function mi_plugin_modificar_excerpt( $excerpt ) {
    return $excerpt . '<a href="' . get_permalink() . '"> Leer más →</a>';
}

Buenas prácticas desde el primer día

Hay tres reglas que deberías aplicar desde el primer plugin que escribas:

1. Prefija todas tus funciones

WordPress carga todos los plugins en el mismo espacio de nombres global. Si dos plugins definen una función llamada get_data(), uno de los dos va a romper todo. La solución es usar un prefijo único en todos tus nombres:

// MAL — puede colisionar con otro plugin
function get_data() { ... }

// BIEN — prefijado con el slug del plugin
function mi_plugin_get_data() { ... }

2. Usa constantes para las rutas

Define constantes al inicio del plugin para las rutas y URLs. Así no tienes que recalcularlas en cada función:

define( 'MI_PLUGIN_VERSION', '1.0.0' );
define( 'MI_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'MI_PLUGIN_URL',  plugin_dir_url( __FILE__ ) );

3. Hooks de activación y desactivación

Si tu plugin necesita crear opciones en la base de datos o hacer flush de las rewrite rules, hazlo en los hooks de activación y desactivación, nunca en cada carga de página:

register_activation_hook( __FILE__, 'mi_plugin_activar' );
function mi_plugin_activar() {
    add_option( 'mi_plugin_version', MI_PLUGIN_VERSION );
    flush_rewrite_rules();
}

register_deactivation_hook( __FILE__, 'mi_plugin_desactivar' );
function mi_plugin_desactivar() {
    flush_rewrite_rules();
}

La estructura de archivos recomendada

Para plugins simples, un solo archivo es suficiente. Pero si el plugin empieza a crecer, esta estructura es la que uso:

mi-plugin/
├── mi-plugin.php        ← Archivo principal con la cabecera
├── includes/
│   ├── class-mi-plugin.php    ← Clase principal
│   ├── admin.php              ← Código solo del admin
│   └── frontend.php           ← Código solo del frontend
├── assets/
│   ├── css/
│   └── js/
└── readme.txt               ← Obligatorio para WordPress.org

Separar el código del admin del frontend es importante para el rendimiento: no tiene sentido cargar las funciones del panel de administración en cada visita de un usuario anónimo.


Conclusión

La barrera de entrada para crear un plugin WordPress es sorprendentemente baja. Con un archivo PHP, una cabecera correcta y un add_action(), ya tienes algo funcional. A partir de ahí, la complejidad crece con lo que necesites construir, no con los requisitos de WordPress.

El plugin que hemos creado en este artículo es la base exacta de todos los plugins que publico en este sitio. A partir de aquí, el siguiente paso es aprender a crear páginas de ajustes en el admin con la Settings API.


¿Qué sigue?

  • → Cómo añadir una página de ajustes con la Settings API
  • → Meta Boxes: añadir campos personalizados al editor
  • → Cómo registrar un Custom Post Type desde un plugin

Deja un comentario

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