Antes de entrar en materia y ponernos a escribir código, es importante saber dónde estamos exactamente en el “mundo WordPress”. Si abres los archivos de tu instalación de WordPress, probablemente veas un batiburrillo de carpetas y archivos. Pero no te agobies, ¡tiene sentido!
Las carpetas cruciales de WordPress
Dentro de la raíz de WordPress, hay una carpeta súper importante: wp-content. Aquí es donde ocurre literalmente toda la magia personalizada. Dentro están, a su vez, otras subcarpetas que te suenan:
themes/: Aquí van los temas. Todo el aspecto visual de WordPress se controla desde aquí. Si compras o descargas un tema (por ejemplo desde ThemeForest), lo subes aquí, tanto desde FTP como desde la propia interfaz de WordPress.
uploads/: Aquí va todo lo que subes a la Biblioteca de Medios – imágenes, PDF, vídeos, archivos varios. Si en tu web hay un archivo subido, está aquí.
plugins/: Aquí, en serio, empieza lo bueno. Esta es la carpeta a la que vamos a dedicar prácticamente todo el post de hoy.
Resumiendo:
Dentro de wp-content se encuentran themes, uploads y plugins. Estas tres constelaciones son las que de verdad te interesa conocer si quieres meter mano a tu WordPress.
¿Qué es un plugin de WordPress?
Vale, ya sabes dónde tienes que investigar en tus archivos, pero... ¿qué es realmente un plugin? Pues, te lo pongo fácil: un plugin no es más que un paquete de código que le suma nuevas funciones a tu sitio WordPress. Y no exagero: hay plugins para todo, desde SEO, caché, creadores visuales de páginas, formularios, seguridad, analítica...
¿Sabías que en el directorio oficial de plugins de WordPress hay más de 60.000 plugins públicos? Así tal cual, ¡una barbaridad!
Pero ahora nos vamos a centrar en crear el tuyo propio. No hace falta que sea como Elementor ni que tenga miles de líneas. Aquí vamos a hacer uno sencillo, ideal para pillarle el truco al asunto.
Manos a la obra: Crea tu carpeta de plugin
El primer paso es entrar en la carpeta plugins (recordemos: wp-content/plugins).
Aquí puedes ver todos los plugins instalados como subcarpetas. Para crear el tuyo propio, simplemente crea una carpeta nueva. Elige un nombre único, no se te ocurra ponerle “elementor”, por ejemplo, que te dará problemas si más adelante instalas el plugin real con ese nombre.
Ejemplo:
Si te llamas Pepe Pérez, igual puedes ponerle ppeperez-funciones o algo por el estilo.
Consejo básico:
Elige nombres de carpetas únicos para tus plugins para evitar futuros dolores de cabeza por conflictos de nombres.
Crea tu primer archivo PHP de plugin
Dentro de la carpeta que acabas de crear, hay que poner el archivo principal PHP de tu plugin. Te recomiendo ponerle exactamente el mismo nombre que la carpeta – así todo es más limpio.
Por ejemplo:
wp-content/plugins/current-time-display/current-time-display.php
Así, tu archivo de plugin empieza siendo un simple archivo PHP. Pero, ojo, todavía falta que WordPress lo reconozca.
Las cabeceras: El DNI de tu plugin
Para que WordPress lo “vea” como plugin, hay que añadir al principio de tu archivo PHP un bloque de comentario especial que se llama cabecera del plugin. Esto lleva información como:
Nombre del plugin
Versión
Autor
Licencia
Descripción, etc.
Aquí un ejemplo típico que puedes copiar-pegar tranquilamente de la documentación oficial de WordPress:
<?php/*Plugin Name: Current Time DisplayPlugin URI: https://tuweb.com/Description: Añade la hora actual al final de los artículos de WordPress.Version: 1.0Author: Pepe PérezAuthor URI: https://tuweb.com/License: GPL2*/?>
¿Sabías que…?
Si pones cinco archivos con cinco cabeceras así en la carpeta de plugins, WordPress lo tratará como cinco plugins independientes. Así es como detecta cuáles están ahí.
¿Por qué sale mi plugin en el panel de WordPress?
Toda esa información de la cabecera no es solo para que WordPress sepa que eso es un plugin. También es lo que aparece cuando entras en el panel de administración y ves la lista de plugins activos.
Desde aquí podrás activarlo, desactivarlo, y ver detalles como el autor y la versión.
Buenas prácticas antes de codear
Antes de volverte loco/a/s metiendo código en tu archivo PHP, es MUY recomendable poner un pequeño chequeo de seguridad al principio del archivo. Es una línea que comprueba que el archivo lo está ejecutando WordPress, no alguien que lo visita directamente desde el navegador. Así evitamos posibles agujeros de seguridad y hackeos tontos.
Este es el típico chequeo que ves en todos los plugins:
<?phpif ( ! defined( 'ABSPATH' ) ) {exit; // Exit if accessed directly.}?>
Esto es copiar-pegar, sin pensar. Simplemente acostúmbrate a ponerlo.
El corazón de un plugin: los hooks de WordPress
Ahora viene lo realmente interesante. ¿Te has preguntado alguna vez cómo es posible que WordPress sea tan customizable, al punto de poder pasar de un simple blog a una tienda y luego a una red social solo con plugins?
La clave de todo está en los hooks, también llamados “ganchos”.
Gracias a los hooks, podemos “colgar” nuevas acciones y/o modificar cosas a mitad de ejecución de WordPress, sin tocar ni una línea del core.
Hay dos tipos principales:
Actions (acciones): Te permiten decir “cuando pase esto, ejecuta mi función”. Ejemplo: después de guardar un post.
Filters (filtros): Te dejan interceptar un dato justo antes de que se muestre o utilice, para poder modificarlo.
“La razón por la que WordPress es tan extensible es por los hooks, porque dejan modificar cualquier cosa en el punto exacto en que te interesa. ¡Así pasas de tener sólo un blog a una tienda online en un rato!”
Ejemplo práctico: plugin para mostrar la hora actual al final de cada post
Vamos a hacer un plugin de ejemplo muy sencillo. Su función será muy clara: añadir la hora actual al final de cada post/artículo de WordPress.
Este ejemplo resume todo lo que necesitas saber para crear plugins sencillos y empezar a comprender el flujo de WordPress por dentro.
1. Estructura de archivos
Así debería verse la estructura de carpetas y archivos:
wp-content/└── plugins/└── current-time-display/└── current-time-display.php
2. El código básico del plugin
Nuestro archivo current-time-display.php debería tener este aspecto:
<?php/*Plugin Name: Current Time DisplayDescription: Añade la hora actual al final de los artículos de WordPress.Version: 1.0Author: Pepe Pérez*/if ( ! defined( 'ABSPATH' ) ) {exit;}// Enganchamos nuestra función a 'the_content', que es el filtro del contenidoadd_filter( 'the_content', 'ctd_add_time_to_content' );function ctd_add_time_to_content( $content ) {// Sólo queremos modificar el contenido si es un post individual, está en el loop, y es el query principalif ( is_singular() && in_the_loop() && is_main_query() ) {$hora_actual = date('H:i:s');$content .= '<p style="color:gray;">Hora actual: ' . esc_html($hora_actual) . '</p>';}return $content;}?>
3. ¿Y ahora qué?
Sube la carpeta current-time-display a tu directorio /wp-content/plugins/.
Ve al panel de administración de WordPress y busca tu plugin en la sección “Plugins”.
Actívalo.
Entra a cualquier post/artículo…
Y ¡magia! Verás la hora actual al final del post.
Más allá de lo básico: entendiendo los ganchos
Vamos a profundizar un poquito más en cómo funcionan los hooks.
En nuestro ejemplo utilizamos un filtro (add_filter) llamado the_content. Esto quiere decir que todo el contenido al final pasa por este filtro antes de mostrarse en pantalla. Por tanto, ¡ahí podemos alterar lo que queramos! Es tan poderoso que de aquí se pueden colgar otros plugins (botones sociales, comentarios personalizados, anuncios…) todos usan, en esencia, el mismo truco.
¿Qué son is_singular(), in_the_loop(), y is_main_query()?
Son funciones nativas de WordPress usadas para asegurarnos de que el plugin solo modifica justo lo que queremos:
is_singular(): Comprueba que estamos en un artículo/página/producto concreto. No en el listado.
in_the_loop(): Asegura que estamos dentro del loop principal de WordPress.
is_main_query(): Garantiza que es la consulta principal, y no una secundaria (como widgets, etc).
Esto es experiencia. Al principio vas haciendo pruebas, y te das cuenta que si no pones estos condicionales, tu filtro puede modificar hasta los menús o cualquier cosa considerada “contenido” por WordPress.
Frase de veterano/a:
Estas condiciones las aprendes a base de estropear menús y páginas enteras sin querer… luego lo pillas rápido. 😅
Ejemplos reales de uso de hooks
Los hooks no son solo para mostrar la hora. Con ellos se hacen cosas como:
Insertar publicidad arriba, en medio o al final de los posts.
Añadir bloques con enlaces sociales.
Modificar productos en WooCommerce (la tienda online por excelencia).
Personalizar formularios, galerías, sliders, y cualquier cosa imaginable.
Y si quieres hilar más fino todavía, piensa que los hooks son la base de todos esos plugins que parece que “encajan mágicamente” unos con otros.
¿Sabías qué… en otras plataformas esto era un drama?
En los tiempos pre-WordPress, plataformas como phpBB o similares funcionaban con lo que se llamaban “parches” – literalmente tenías que modificar archivos del core, ir a la línea 50 y cambiar tal cosa, luego a la línea 200 y pegar otra. Era un dolor de muelas.
En WordPress, subes el plugin, lo activas, ¡y ya! Esa es la gran diferencia.
Seguridad extra: nunca ejecutes un archivo fuera de WordPress
Como mencionamos antes, es fundamental este trocito de código:
if ( ! defined( 'ABSPATH' ) ) {exit; // Exit if accessed directly.}
Es lo que asegura que nadie pueda lanzar tu plugin por la puerta trasera.
Cosas útiles a tener en cuenta
No todo código ajeno es seguro: Copiar de StackOverflow, de un amigo, o generado por IA es útil, pero siempre revisa bien antes de ponerlo en producción.
Aprender por prueba y error: Muchas veces activarás el plugin y verás efectos raros. Tranquilo/a, así se aprende.
Todo plugin es mejor con su archivo README. Si alguna vez quieres subirlo al repositorio público, te exigen un archivo llamado readme.txt (o readme.md) con descripción, instrucciones y demás detalles.
Usar inteligencia artificial para crear plugins pequeños
Hoy en día, herramientas de IA pueden ayudarte muchísimo. Como ejemplo, pedí (en español):
“Crea un plugin para WordPress que añade una frase con la hora actual al final de cada post.”
La IA:
Comprobó que existía la carpeta de plugins
Dedujo que tenía que crear una nueva carpeta
Generó el archivo principal PHP
Escribió el código
Añadió un archivo README con instrucciones básicas
Con este nivel de automatización, para pequeñas cosas, puede ser súper útil. Eso sí, no esperes que te haga un WooCommerce de la noche a la mañana, pero para detalles, patches pequeños o entender la estructura de WordPress, es ideal.
“La IA me hizo el plugin en menos de dos minutos, incluso generó el README.”
Cómo pedirle ayuda a la IA
Si lo pruebas, aquí unos trucos:
Sé muy específico: Di exactamente lo que quieres hacer.
Especifica los nombres de carpetas y archivos.
Indica para qué versión de WordPress lo quieres (si es importante).
Pide siempre el chequeo con ABSPATH para la seguridad.
Cuando dudes, pide explicaciones línea a línea para aprender de cada bloque de código generado.
Para terminar: haz pruebas, equivócate sin miedo y aprende
Como casi todo en WordPress, aquí la clave es practicar. Haz muchos experimentos, rompe tu sitio si hace falta (¡mejor en local, claro!), prueba, activa, desactiva y mira los resultados.
En palabras de Francisco Torres:
“Los errores están siempre ahí. Nadie está exento de errores, ni siquiera este podcast. Aquí también nos equivocamos.”
Y lo mejor es que se aprende justo así. No tengas miedo de “liarla”, porque es la mejor manera de entender de verdad cómo funciona WordPress por dentro. Empieza con cositas como añadir una línea al contenido, luego atrévete con cosas más complejas, pero siempre pasito a paso.
Recursos útiles
Documentación oficial de plugins WordPress
Ejemplos de hooks y filtros
Repositorio oficial de plugins WordPress
Guía de buenas prácticas en desarrollo de plugins
Resumen gráfico del proceso
Explora la carpeta wp-content/plugins
Crea una carpeta para tu plugin
Haz el archivo principal PHP y añade tu cabecera
Pon siempre el chequeo de seguridad
Engancha tu función a un hook (the_content)
Activa tu plugin en WordPress y prueba
Experimenta, equivócate y aprende