Guía práctica para el desarrollo de plugins para WordPress: Crea tu primer plugin funcional desde cero

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

El sistema de plugins de WordPress es el núcleo de su potente capacidad de expansión. Gracias a ellos, los desarrolladores pueden agregar a un sitio web funciones que van desde simples formularios de contacto hasta complejas soluciones de comercio electrónico. Este artículo te guiará a través del proceso completo de creación de un plugin con funcionalidades completas, ayudándote a comprender en profundidad su estructura básica, el mecanismo de los “hooks” (ganchos de programación), las cuestiones de seguridad y las mejores prácticas. Al final, tendrás un plugin listo para ser publicado o utilizado directamente.

Entorno de desarrollo y preparaciones básicas

Antes de escribir la primera línea de código, es esencial contar con un entorno de desarrollo estable y eficiente. Esto no solo te permite concentrarte en la construcción de la lógica del programa, sino que también ayuda a evitar errores comunes.

Configuración del entorno de desarrollo local

Se recomienda utilizar un conjunto de herramientas para servidores locales, como XAMPP, MAMP o el más avanzado Local by Flywheel. Asegúrese de que la versión de PHP (se recomienda 7.4 o superior) sea compatible con el entorno de WordPress que se va a implementar, y active el modo de depuración. En WordPress…wp-config.phpEn el archivo, se establecen los ajustes.WP_DEBUGParatrueEsto mostrará todos los errores y advertencias durante la fase de desarrollo, lo que te ayudará a localizar los problemas rápidamente.

Lecturas recomendadas Guía para principiantes en el desarrollo de plugins para WordPress: Desde cero hasta la creación de módulos funcionales profesionales

Planificación de la estructura del archivo del complemento

Un plugin estándar debe contener, al menos, un archivo principal. La práctica habitual es crear una carpeta dedicada al plugin, que se nombrará de acuerdo con la función principal de este. Por ejemplo…my-first-pluginEn esa carpeta, el archivo principal suele tener el mismo nombre que la carpeta y termina con un extensión específica..phpa sabermy-first-plugin.phpUna estructura clara facilita la adición posterior de archivos de JavaScript, CSS, paquetes de lenguaje o clases.

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).

Crear el archivo principal del plugin y la información de cabecera básica

Tanto el “punto de entrada” de los plugins como el proceso de identificación de usuarios dependen de la información contenida en las cabeceras (headers) al principio del archivo principal. Esta información es clave para que WordPress reconozca y cargue los plugins de manera correcta.

Escribir un encabezado de plugin estándar

Al principio del archivo PHP principal, se debe utilizar un bloque de comentarios específico de PHP para proporcionar información sobre el plugin. Esta información se mostrará en la página de administración de plugins del backend de WordPress.

<?php
/**
 * Plugin Name:       我的第一个功能插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个实战指南中创建的示例插件,用于演示核心开发流程。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Entre ellos,Plugin NameYText DomainEste campo es obligatorio; los demás campos son optativos. Campo de texto.Text DomainSe utiliza para el soporte de internacionalización.

Prevenir el acceso directo a los archivos

Para proteger la seguridad del código de los plugins y evitar que el archivo principal sea accedido directamente a través de una URL, lo que podría provocar la divulgación de información o errores, es necesario agregar una comprobación de acceso directo después de los datos de cabecera y antes de cualquier otro código.

Lecturas recomendadas Guía de desarrollo personalizado de plugins para WooCommerce: Crea tu tienda en línea exclusiva

// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

ConstanteABSPATHSe trata de la ruta absoluta al directorio raíz de WordPress, la cual se define durante su ejecución. Este requisito garantiza que el código posterior solo se ejecutará en un entorno WordPress.

Implementar las funciones principales y los hooks de WordPress

WordPress permite que tu código intervenga en los procesos centrales del sistema o modifique datos en momentos específicos gracias a dos mecanismos poderosos: los ganchos de acción (action hooks) y los ganchos de filtro (filter hooks). Comprender y utilizar estos mecanismos es clave para el desarrollo de plugins.

Usar ganchos de acción para agregar funcionalidades.

Los ganchos de acción (action hooks) te permiten ejecutar código personalizado cuando ocurren eventos específicos. Por ejemplo, podríamos crear una función que añada automáticamente los derechos de autor al final del contenido de un artículo. Para ello, es necesario utilizar…the_contentLos filtros (que en esencia son ganchos de filtro, pero se utilizan de manera similar a los ganchos de acción) y…wp_enqueue_scriptsSe utilizan ganchos de acción (action hooks) para cargar recursos.

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%.

Primero, escribimos una función.mfp_add_copyright_noticeY montarlo en…the_contentEn el gancho.

/\n// Añadir una declaración de derechos de autor después del contenido del artículo
function mfp_add_copyright_notice( $content ) {
	if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
		$copyright_text = '<p><em>Los derechos de autor de este artículo pertenecen a este sitio web. Por favor, indique la fuente al reproducirlo.</em></p>'$content .= $copyright_text;
	}
	return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_notice' );

Los criterios de evaluación aseguran que la declaración de derechos de autor solo se muestre en el ciclo principal de cada artículo en la interfaz frontal, sin afectar la página, el resumen ni el backend.

Modificar datos utilizando los ganchos (hooks) de los filtros

Los ganchos de filtro (filter hooks) se utilizan para modificar cualquier dato que se les proporcione. Supongamos que queremos modificar ciertas partes del título de un sitio web; en ese caso, podemos crear una función y agregarla a los ganchos de filtro correspondientes.wp_titleO algo más moderno.document_title_partsFiltros.

Lecturas recomendadas Descripción detallada del proceso completo de desarrollo de plugins para WordPress: una guía práctica desde los principios hasta la maestría

// 修改网站标题后缀
function mfp_modify_title_suffix( $title ) {
	if ( is_home() ) {
		$title['suffix'] = ' | 我的精彩博客';
	}
	return $title;
}
add_filter( 'document_title_parts', 'mfp_modify_title_suffix' );

Introducir scripts y estilos de manera segura

Para agregar estilos o interacciones frontales a un plugin, es necesario utilizar los métodos recomendados por WordPress.wp_enqueue_style()Ywp_enqueue_script()Función, y a través de…wp_enqueue_scriptsLlamada a un gancho (hook).

// 注册并排队插件的前端样式
function mfp_enqueue_frontend_assets() {
	// 获取插件目录的URL
	$plugin_url = plugin_dir_url( __FILE__ );

// 排队一个CSS文件
	wp_enqueue_style(
		'mfp-frontend-style',
		$plugin_url . 'assets/css/frontend.css',
		array(),
		'1.0.0'
	);

// 排队一个JS文件,并依赖jQuery
	wp_enqueue_script(
		'mfp-frontend-script',
		$plugin_url . 'assets/js/frontend.js',
		array( 'jquery' ),
		'1.0.0',
		true // 在页脚加载
	);
}
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_frontend_assets' );

Crear una página de administración y opciones de configuración.

Muchos plugins requieren ofrecer opciones de configuración a los usuarios. WordPress proporciona una API de configuración que permite crear menús de administración y páginas de opciones de manera segura y estandarizada.

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.

Añadir menú de administración

En primer lugar, utiliceadd_action( ‘admin_menu’, … )Venga a registrar un nuevo elemento de menú de administración o un submenú. A continuación se muestra la función correspondiente:mfp_create_admin_menuSe agregará una página de menú secundario bajo el menú principal de “Ajustes”.

// 创建插件管理菜单
function mfp_create_admin_menu() {
	add_options_page(
		‘我的插件设置’, // 页面标题
		‘我的插件’,     // 菜单标题
		‘manage_options’, // 权限要求
		‘mfp-settings’,   // 菜单slug
		‘mfp_settings_page_html’ // 用于输出页面内容的回调函数
	);
}
add_action( ‘admin_menu’, ‘mfp_create_admin_menu’ );

Construir la página de configuración y los campos

A continuación, es necesario definir la función de callback.mfp_settings_page_htmlSe renderiza el contenido de la página y, mediante la API de configuración, se registra un grupo de opciones, una opción concreta y los campos correspondientes.

\n// Establecer la salida HTML de la página de configuración
function mfp_settings_page_html() {
	// Comprobar los permisos del usuario
	if ( ! current_user_can( ‘manage_options’ ) ) {
		return;
	}
	?&gt;
	<div class="“wrap”">
		<h1>¿¿¿¿php echo esc_html( get_admin_page_title() ); ?&gt;</h1>
		<form action="/es/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
			<?php
			// 输出设置字段、非ce等
			settings_fields( ‘mfp_options_group’ );
			do_settings_sections( ‘mfp-settings’ );
			submit_button( ‘保存设置’ );
			?>
		<input type="hidden" name="trp-form-language" value="es"/></form>
	</div>
	¿php?
}

// Inicialización de la configuración
function mfp_settings_init() {
	// Registrar una opción de configuración, los datos se guardarán en la tabla wp_options, con la clave ‘mfp_options’
	register_setting( ‘mfp_options_group’, ‘mfp_options’ );

// Añadir una sección de configuración
add_settings_section(
	‘mfp_section_basic’,
	‘Configuración básica’,
	null, // Función de devolución para el texto de introducción de la sección, no se necesita aquí
	‘mfp-settings’
);

// Añadir un campo de texto a la sección
add_settings_field(
	‘mfp_field_copyright_text’,
	‘Texto de copyright’,
	‘mfp_field_copyright_text_html’, // Función de devolución para renderizar el campo en HTML
	‘mfp-settings’,
	‘mfp_section_basic’,
	array( ‘label_for’ =&gt; ‘mfp_field_copyright_text’ )
);
}
add_action( ‘admin_init’, ‘mfp_settings_init’ );

// Renderizar el campo de texto de copyright
function mfp_field_copyright_text_html() {
	$options = get_option( ‘mfp_options’ );
	$value = $options[ ‘copyright_text’ ] ?? ‘Texto de copyright por defecto’; // Operador de coalescencia de PHP 7.0+
	?&gt;
	<input type="“text”"
		   id="“mfp_field_copyright_text”"
		   name="“mfp_options[copyright_text]”"
		   value="“NO NUMERIC NOISE KEY" 1000”
		 class="“regular-text”">
	¿php?  
}

Ahora, puedes hacerlo como antes.mfp_add_copyright_noticeEn la función, se utiliza…get_option( ‘mfp_options’ )[‘copyright_text’]Obtener dinámicamente el texto de configuración del usuario en el backend permite que las funciones del plugin sean configurables.

resúmenes

Este artículo describe en detalle el proceso completo para desarrollar un complemento (plugin) para WordPress desde cero. Comenzamos por configurar el entorno de desarrollo y crear el archivo principal que contiene la información de cabecera estándar, destacando la importancia de la protección de seguridad. A continuación, analizamos en profundidad el mecanismo de ganchos (hooks) esencial para el desarrollo de complementos para WordPress: cómo utilizar los ganchos de acción para ejecutar código y los ganchos de filtro para modificar datos, y demostramos métodos seguros para cargar recursos frontales. Finalmente, creamos una página de configuración de nivel profesional mediante la API de WordPress, lo que permite que los usuarios personalicen las funciones del complemento.

Todo el proceso de desarrollo sigue los estándares de codificación y las mejores prácticas de WordPress, lo que incluye el uso de prefijos únicos para las funciones, la validación y el escape de datos, así como la implementación de una base para el soporte a la internacionalización. Una vez que domines estos conceptos básicos, podrás expandir las funcionalidades de tu plugin de manera ilimitada combinando diferentes ganchos (hooks), creando tablas de base de datos personalizadas, desarrollando herramientas auxiliares o utilizando código corto.

FAQ Preguntas más frecuentes

¿Cómo elegir un prefijo adecuado para las funciones y clases de un plugin?

Las funciones globales, clases, variables y constantes de todos los plugins deben utilizar un prefijo único para evitar conflictos de nombres con otros plugins o temas. El prefijo generalmente se compone de la abreviatura o el nombre corto del plugin. Por ejemplo, si el nombre del plugin es “My First Plugin”, se puede elegir un prefijo adecuado para identificar sus elementos.mfp_omyfirstplugin_Mantener la coherencia es de vital importancia.

¿Por qué es necesario utilizar `wp_enqueue_script` para agregar scripts?

utilizarwp_enqueue_script()Ywp_enqueue_style()Es el método recomendado oficialmente por WordPress. Permite manejar correctamente las dependencias de scripts (como jQuery), evita que el mismo script se cargue repetidamente y permite que otros plugins o temas lo utilicen.wp_deregister_script()Para eliminar o reemplazar tu script de manera segura, simplemente úsalo directamente.Si se insertan etiquetas, no se podrán disfrutar de estas ventajas de gestión, y es posible que surjan conflictos.

¿Cuáles son las principales directrices de seguridad al desarrollar plugins?

El principio fundamental es: nunca confíes en lo que ingresa el usuario. En cuanto a todo lo que proviene de…$_GET$_POST$_REQUESTSe pueden verificar, limpiar y escapar los datos obtenidos de una base de datos antes de usarlos para generar HTML.esc_html()esc_attr(); Se usa para la salida a la URL.esc_url()En las consultas SQL, es esencial utilizar…$wpdb->prepare()Realiza consultas parametrizadas para evitar inyecciones SQL. Además, utiliza…current_user_can()Verificar los permisos del usuario.

¿Cómo puedo agregar soporte de internacionalización a mi plugin?

En primer lugar, configure correctamente la información del encabezado del complemento.Text DomainYDomain PathLuego, en todos los lugares del código donde haya cadenas de texto que necesiten ser traducidas, utilice…()Para realizar la traducción de salida, utilice_e()Realizar la traducción de “realizar la traducción de”…( ‘Hello World’, ‘my-first-plugin’ )Finalmente, utiliza herramientas como Poedit para analizar el código y generar lo necesario..potArchivos de plantilla, y crearlos para diferentes idiomas..poY.moTraducir el documento y colocarlo en/languagesEn el directorio.