Guía de introducción al desarrollo de plugins de WordPress.

Lectura en 3 minutos
2026-03-12
2026-06-04
2,062
Gano comisiones cuando compras a través de los enlaces de abajo, sin coste adicional para ti.

Guía de introducción al desarrollo de plugins de WordPress.

Los plugins de WordPress son el mecanismo clave para expandir las funcionalidades básicas del software. Permite a los desarrolladores agregar nuevas funciones a un sitio web o modificar el comportamiento existente sin necesidad de modificar el código central de WordPress. Ya sea una función sencilla basada en códigos cortos o un sistema de comercio electrónico complejo, todo puede ser implementado mediante plugins. Comprender el funcionamiento de los plugins es el primer paso que debe dar cualquier desarrollador de WordPress.

Un plugin para WordPress es, en esencia, uno o más archivos PHP que contienen código que sigue los estándares de codificación de WordPress. Estos archivos se colocan en una carpeta específica y interactúan con el núcleo de WordPress a través de la API de plugins. Desarrollar plugins requiere no solo conocimientos de PHP, sino también una buena familiaridad con la amplia biblioteca de funciones que ofrece WordPress, el sistema de ganchos (Hooks) y los métodos de operación con la base de datos.

Crea tu primer archivo de plugin.

Cada plugin de WordPress necesita un archivo principal, que sirve como punto de entrada para el plugin. Este archivo contiene la información metadatos del plugin y es responsable de inicializar sus funciones esenciales.

Lecturas recomendadas Guía completa para el desarrollo de plugins de WordPress: desde cero hasta su publicación en la tienda.

Estructura del archivo principal del plugin

El núcleo de un plugin es el archivo principal, que suele llevar el nombre del mismo plugin. Por ejemplo: my-first-plugin.phpLas notas de cabecera de este archivo son de vital importancia, ya que proporcionan a WordPress información sobre la identidad del plugin. Una nota de cabecera mínima para un archivo principal se muestra a continuación:

Servidor de WordPress de UltaHost
Garantía de reembolso en 30 días, ancho de banda ilimitado y bases de datos, protección gratuita contra ataques DDoS; descuento del 50% al comprar por 3 años (versiones de 4 TB y 5 TB).
<?php
/**
 * Plugin Name: 我的第一个插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于演示的简单WordPress插件。
 * Version:     1.0.0
 * Author:      你的名字
 * Author URI:  https://example.com
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

El campo “Nombre del Plugin” es obligatorio, ya que WordPress lo utiliza para identificar y mostrar tu plugin en la interfaz de administración en segundo plano. Otras informaciones, como la versión y la descripción, ayudan a los usuarios a conocer más detalles sobre el plugin.

Después de definir la información del plugin, generalmente comenzamos a agregar el código de las funciones. Por ejemplo, una de las funciones más simples es agregar una línea de texto personalizado en la parte inferior del sitio web. Esto se puede lograr utilizando… wp_footer Este gancho (Action Hook) se utiliza para implementar esta funcionalidad.

Implementar una función de funcionalidad simple

A continuación se muestra un ejemplo completo del archivo principal de un plugin que implementa la función de agregar texto en la parte inferior de una página:

&lt;?php
/**
 * Plugin Name: 页脚问候插件
 */
// 防止直接访问文件
if ( ! defined( &#039;ABSPATH&#039; ) ) {
	exit;
}

/**
 * 在网站页脚输出一条自定义问候语
 */
function myplugin_add_footer_text() {
	echo &#039;<p style="text-align:center;">¡Gracias por visitar este sitio web!</p>';
}
// 将函数挂载到`wp_footer`钩子上
add_action( 'wp_footer', 'myplugin_add_footer_text' );

En este código,myplugin_add_footer_text Es una función que hemos definido nosotros; ella se encarga de realizar las operaciones de salida específicas.add_action() Es una función de WordPress que permite “enganchar” (o conectar) nuestras propias funciones a la estructura central de WordPress. wp_footer En el punto de ejecución correspondiente. De esta manera, cada vez que WordPress llegue a la sección del pie de página, nuestra función se llamará automáticamente.

Lecturas recomendadas De los principios a la maestría: Guía completa y tutorial práctico para el desarrollo de plugins para WordPress

Comprender el mecanismo de ganchos (hooks) de WordPress

Los hooks son el núcleo y el alma del desarrollo de plugins para WordPress, ya que permiten modificar o expandir las funciones básicas de este sistema. Existen dos tipos principales de hooks: los hooks de acción (Action Hooks) y los hooks de filtro (Filter Hooks).

Aplicación de los ganchos de acción (Action Hooks)

Los ganchos de acción (action hooks) te permiten ejecutar código personalizado en momentos específicos o cuando ocurren ciertos eventos. Por ejemplo, cuando se publica un artículo…publish_post), o cuando el usuario inicia sesión (wp_loginUsar. add_action() Una función puede enlazar tu función de callback a un gancho de acción (action hook).

Los ejemplos siguientes demuestran cómo agregar automáticamente una declaración de derechos de autor al final del contenido de un artículo:

hosting.com Alojamiento compartido
Alto rendimiento con CPU AMD EPYC, almacenamiento SSD NVMe y LiteSpeed, asistencia interna de expertos 24 horas al día, 7 días a la semana, medidas de seguridad avanzadas como SSL, fuerza bruta, protección contra malware y DDoS, ahorro de hasta 73%.
function myplugin_add_post_copyright( $content ) {
	if ( is_single() ) {
		$copyright = '<div class="post-copyright"><p>Este artículo es de contenido original; por favor, indique la fuente al reproducirlo.</p></div>';
		$content .= $copyright;
	}
	return $content;
}
add_filter( 'the_content', 'myplugin_add_post_copyright' );

Tenga en cuenta que aquí hemos utilizado… add_filter() en lugar de add_action()Porque modificar el contenido de un artículo se considera un acto de “filtrado”. Esto da lugar a otro tipo de mecanismo importante (o “gancho” funcional, en términos de programación).

Funciones de los ganchos de filtro (filter hooks)

Los ganchos de filtro te permiten modificar los datos que se transmiten durante el proceso. La principal diferencia con los ganchos de acción es que las funciones de filtro deben devolver un valor (generalmente el valor de entrada modificado). Por ejemplo,the_content Los filtros te permiten modificar el contenido de los artículos que se van a publicar., the_title Te permito modificar el título del artículo.

Los ejemplos siguientes demuestran cómo utilizar filtros para modificar la longitud de los extractos de artículos:

Lecturas recomendadas Guía para principiantes en el desarrollo de plugins para WordPress: Crea tu primer plugin personalizado desde cero

function myplugin_custom_excerpt_length( $length ) {
	// 将默认的55个词改为20个词
	return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' );

En este ejemplo, nuestra función… myplugin_custom_excerpt_length Se recibió el valor predeterminado para la longitud del extracto y se devolvió un nuevo valor personalizado por nosotros. WordPress utilizará este nuevo valor para generar el extracto.

Internacionalización de plugins y campos de texto

Para que tu plugin sea utilizado por usuarios de todo el mundo, la internacionalización (i18n) es un paso esencial. WordPress ofrece un conjunto completo de funciones para realizar la traducción de plugins a múltiples idiomas.

Alojamiento compartido InterServer
Alojamiento compartido $2.50 USD al mes , primer mes $0.1 USD código promocional tryinterserver, 461 scripts de aplicaciones en la nube, instalación en un clic.

Campo de texto para cargar el texto del complemento.

El primer paso hacia la internacionalización es configurar correctamente el dominio de texto (Text Domain) en el plugin y cargar los archivos de traducción en el momento adecuado. El dominio de texto debe coincidir exactamente con el “Text Domain” definido en las notas al principio del archivo principal del plugin.

Normalmente lo utilizamos durante la inicialización del plugin. load_plugin_textdomain Se utiliza una función para cargar las traducciones. Una práctica estándar es colocar el siguiente código en el archivo principal:

function myplugin_load_textdomain() {
	load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'myplugin_load_textdomain' );

Este código define una función. myplugin_load_textdomainY utilizar add_action Montarlo en… plugins_loaded En el gancho. Esto asegura que los archivos de traducción se carguen antes de que se ejecute el código funcional del plugin. El tercer parámetro especifica la ruta de almacenamiento del archivo de idioma (el archivo con extensión .mo), que generalmente se encuentra en el directorio del plugin. languages En la carpeta.

Envolver una cadena de texto utilizando la función de traducción.

En el código de los plugins, todas las cadenas de texto dirigidas al usuario que necesitan ser traducidas deben ser envueltas en funciones específicas. Las dos funciones más comunes son… __() Y _e()

__() La función devuelve la cadena de texto traducida. _e() La función simplemente lo muestra en pantalla (con el comando `echo`). En el ejemplo anterior en el que se añadía texto al pie de página, deberíamos escribirlo de esta manera para soportar la traducción:

function myplugin_add_footer_text() {
	$text = __( '感谢您访问本网站!', 'my-first-plugin' );
	echo '<p style="text-align:center;">'`. esc_html($text)`.'</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

Aquí, la cadena de texto “¡Gracias por visitar este sitio web!” se… __() Envoltura de una función, con la especificación del campo de texto. my-first-pluginLos traductores pueden generar archivos de traducción en diferentes idiomas para esta cadena de texto. Al mismo tiempo, utilizamos… esc_html() Es una práctica de seguridad importante que las funciones realicen la escapación de los datos que se generan como salida.

Seguridad de los plugins y prácticas recomendadas

Desarrollar un plugin popular implica que la seguridad y la calidad del código sean tan importantes como las funciones que ofrece. Seguir las mejores prácticas de desarrollo puede proteger los sitios web de los usuarios y, al mismo tiempo, mejorar la fiabilidad y mantenibilidad del plugin.

Validación de datos, escape y limpieza

Nunca confíes en los datos provenientes de usuarios o fuentes externas. Antes de procesar cualquier dato de entrada (como $_GET, $_POST, $_COOKIE) o de enviar datos a un navegador o una base de datos, es necesario realizar las comprobaciones adecuadas.

Para los datos que se muestran en una página HTML, se deben utilizar las funciones de escape de WordPress. esc_html(), esc_attr(), esc_url()Para los datos que se van a almacenar en la base de datos, se utiliza… wp_strip_all_tags() o sanitize_text_field() Se realiza una limpieza. El ejemplo siguiente muestra una forma segura de manejar los datos ingresados en un formulario:

// 假设我们接收一个名为`user_bio`的POST字段
$raw_bio = $_POST['user_bio'] ?? ''; // 使用空合并运算符提供默认值
// 清理数据:移除标签,清理额外空格和特殊字符
$clean_bio = sanitize_textarea_field( $raw_bio );
// 在存入数据库前,还可以使用`wp_kses_post`允许安全的HTML标签
$safe_bio_for_db = wp_kses_post( $clean_bio );
// 现在$safe_bio_for_db可以安全地存入数据库了

Usar métodos que no dependan de la tecnología CE (Common Edge) ni de comprobaciones de permisos.

Si tu plugin cuenta con una interfaz de administración o gestiona el envío de formularios, es esencial utilizar el mecanismo de “Nonce” (Número utilizado una vez) de WordPress para evitar ataques de falsificación de solicitudes entre sitios (CSRF, Cross-Site Request Forgery). Además, debes implementar comprobaciones de capacidades (Capability Checks) para asegurarte de que el usuario actual tenga los permisos necesarios para realizar dichas operaciones.

Al crear un menú de administración o un formulario, genere un campo que no sea de tipo “CE” (Common Element).

// 在表单中输出一个非ce字段
wp_nonce_field( 'myplugin_save_action', 'myplugin_nonce_field' );

Al procesar el envío de un formulario, se debe verificar si este campo no contiene el valor “ce”.

// 验证非ce
if ( ! isset( $_POST['myplugin_nonce_field'] ) || ! wp_verify_nonce( $_POST['myplugin_nonce_field'], 'myplugin_save_action' ) ) {
	wp_die( __( '安全校验失败,操作已终止。', 'my-first-plugin' ) );
}
// 检查用户权限(例如,检查是否有`manage_options`权限)
if ( ! current_user_can( 'manage_options' ) ) {
	wp_die( __( '您没有执行此操作的权限。', 'my-first-plugin' ) );
}
// 通过所有安全检查,开始处理数据...

Seguir estas pautas de seguridad es la base para crear un complemento (plugin) fiable.

resúmenes

El desarrollo de plugins para WordPress es un proceso que convierte las ideas en funcionalidades reales, y se basa en una comprensión profunda de la arquitectura central de este sistema. Todo comienza con la creación de un archivo principal que contenga las anotaciones de cabecera adecuadas; a partir de ahí, el desarrollador se adentra en este ecosistema. Dominar las diferencias y el uso de los ganchos de acción (action hooks) y los ganchos de filtro (filter hooks) es clave para expandir las funcionalidades del plugin. La internacionalización de los plugins permite que tus creaciones sean utilizadas por usuarios de todo el mundo. Por otro lado, las prácticas de seguridad que se deben seguir en todo el proceso —incluyendo la validación de datos, el escape de caracteres, la limpieza de datos, así como las comprobaciones de permisos y de que el plugin no sea de tipo “non-ce” (non-compliant with WordPress standards)— son la piedra angular para garantizar la estabilidad y confiabilidad del plugin, y para ganar la confianza de los usuarios. Siguiendo estos pasos y buenas prácticas, podrás crear plugins para WordPress que sean potentes, seguros y fáciles de mantener.

FAQ Preguntas más frecuentes

¿Cuántos archivos necesita tener como mínimo un plugin para WordPress?

Un plugin de WordPress con la funcionalidad más simple puede constar de un solo archivo PHP. Este archivo debe contener las notas de cabecera estándar para plugins (como el nombre del plugin, etc.) así como el código que implementa dicha funcionalidad. A medida que las funciones del plugin se vuelven más complejas, es habitual dividirlo en varios archivos que incluyan CSS, JavaScript, imágenes y archivos de traducción de idiomas, entre otros.

¿Debería escribir el código del plugin directamente en el archivo functions.php del tema?

Para el código que está dirigido únicamente al tema actual y que tiene una relación estrecha con sus funciones, se puede escribir dentro del mismo tema.functions.phpSí. Sin embargo, para las funciones que tienen un carácter universal y que se desean utilizar en diferentes temas, se recomienda encarecidamente que se desarrollen como plugins independientes. La ventaja de los plugins es que son independientes del tema en el que se utilizan; por lo tanto, no se pierden cuando se cambia de tema, y también son más fáciles de gestionar y distribuir.

¿Cómo puedo crear una página de configuración de administración para mi plugin?

Puedes utilizar las funciones proporcionadas por WordPress para agregar menús de administración y páginas. Las más comunes son… add_menu_page() o add_options_page() Es necesario crear una función de tipo callback para generar el contenido HTML de la página y manejar el envío de los formularios (incluyendo la verificación de datos y los controles de permisos). Por lo general, este proceso implica el uso de la API de Configuraciones (Settings API) de WordPress, la cual te permite crear y administrar opciones de configuración de manera más estructurada y segura.

Al desarrollar plugins, ¿cómo se depuran y se registran los errores?

Primero, asegúrate de que todo esté configurado correctamente en el entorno de desarrollo.wp-config.phpActivar WP_DEBUG en el archivo:define( 'WP_DEBUG', true );Esto mostrará los errores y advertencias de PHP en la página. Para un depurado más avanzado, se puede utilizar…error_log()La función registra la información en el registro de errores del servidor, o utiliza las funcionalidades de WordPress para ello.wp_debugFunciones relacionadas. Además, existen muchos plugins de depuración de terceros de excelente calidad, como Query Monitor, que pueden ayudarte a analizar consultas a la base de datos, hooks y scripts, siendo una herramienta muy útil para el desarrollo de plugins.