Crea tu primer complemento de WordPress paso a paso: desde lo básico hasta el desarrollo práctico.

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

Fundamentos del desarrollo de plugins de WordPress y preparación del entorno

Los plugins de WordPress son, en esencia, un conjunto de archivos PHP que extienden las funciones básicas del sistema a través de la API proporcionada por WordPress. Un plugin puede ser tan simple como agregar un pequeño fragmento de código, o tan complejo como construir un sistema de gestión completo. Antes de comenzar a programar, es crucial comprender su estructura básica. Cada plugin debe tener un archivo principal, que suele llevar el nombre del mismo plugin. my-first-plugin.phpEl encabezado de comentario en la parte superior de este archivo es clave para que WordPress reconozca los plugins.

El entorno de desarrollo es la piedra angular para un trabajo eficiente. Es necesario configurar un entorno de prueba local que sea lo más similar posible al entorno en línea. Se recomienda utilizar paquetes de servidores locales, como XAMPP, MAMP o Local by Flywheel. Además, asegúrate de que tu editor de código o entorno de desarrollo integrado (IDE) soporte la resaltación de sintaxis PHP y la depuración, como VS Code, PhpStorm o Sublime Text. Activa también las funcionalidades correspondientes en WordPress.WP_DEBUGLos patrones son de gran importancia para la detección de errores durante la fase de desarrollo. Puedes utilizarlos en el sitio web…wp-config.phpEn el archivo, esto se logra mediante la definición de…define('WP_DEBUG', true);Venga, actívalo.

Crea tu primer archivo de plugin.

Comencemos creando el plugin más simple posible: este plugin mostrará una notificación personalizada en la página de administración del sitio web.

Lecturas recomendadas Guía de desarrollo de complementos de WordPress: crea tus propias funciones desde cero hasta su finalización.

Escribir el archivo principal del plugin y las cabeceras de las notas

Primero, en el directorio de instalación de WordPress:wp-content/pluginsDentro de la carpeta, crea una carpeta nueva llamadamy-first-pluginDentro de esa carpeta, cree un archivo PHP con el mismo nombre.my-first-plugin.php

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

Abra este archivo e ingrese el siguiente encabezado de comentario con información estándar 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:       这是一个学习WordPress插件开发的入门示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Después de guardar el archivo, accede a la página de “Plugins” en el panel de administración de WordPress. Deberías ver que “Mi primer plugin” aparece en la lista de plugins. Actívalo; aunque el plugin aún no ha ejecutado ninguna función, ya ha sido cargado con éxito por WordPress.

Implementar una función básica de notificación en el backend

Ahora, agregaremos la primera función a este plugin: mostrar un mensaje de bienvenida en la parte superior de la pantalla de administración. Para ello, utilizaremos las funcionalidades disponibles en WordPress.admin_noticesGancho. En el archivo principal del plugin que acabamos de ver, justo debajo del encabezado de las notas, añada el siguiente código:

// 在管理后台显示自定义通知
function mfp_show_admin_notice() {
    ?&gt;
    <div class="notice notice-success is-dismissible">
        <p><?php _e( '欢迎使用“我的第一个插件”!', 'my-first-plugin' ); ?></p>
    </div>
    &lt;?php
}
add_action( &#039;admin_notices&#039;, &#039;mfp_show_admin_notice&#039; );

Explicación del código: Hemos creado un elemento llamado…mfp_show_admin_noticeEsta función genera un código de notificación en HTML que se ajusta al estilo del backend de WordPress. Se utiliza para mostrar notificaciones o mensajes en la interfaz de usuario de WordPress._e()Las funciones están diseñadas para apoyar la internacionalización (i18n) en el futuro. Finalmente, mediante…add_action()La función permite montar nuestra función personalizada en WordPress.admin_noticesEn este “gancho”. Después de guardar el archivo, actualiza la página del backend de WordPress y verás este mensaje de éxito en verde.

Lecturas recomendadas Guía completa para el desarrollo de complementos de WordPress: desde cero hasta tutoriales prácticos avanzados.

Desarrollo en profundidad de las funciones esenciales de los plugins

Una vez que hayamos dominado la estructura básica, podremos desarrollar funciones más prácticas. Una solicitud común es agregar automáticamente un texto personalizado al final del contenido de los artículos.

Modificar el contenido de un artículo utilizando filtros.

WordPress ofrece una gran cantidad de “filtros” para modificar diversos tipos de datos. Para agregar texto al final del contenido de un artículo, utilizaremos uno de estos filtros.the_contentFiltros: Agregue la siguiente función nueva al archivo principal del plugin:

// 在文章内容末尾添加自定义文本
function mfp_append_to_content( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<div class="my-plugin-footer"><p>¡Gracias por leer! Este artículo se lo presenta “Mi primer complemento”.</p></div>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_append_to_content' );

Esta función recibe el dato original.$contentSe asegura que nuestro texto HTML personalizado solo se añada en las páginas de artículos individuales y únicamente cuando se está realizando una consulta principal, mediante la evaluación de condiciones. Finalmente, el contenido modificado se devuelve. Este método es no invasivo y no modifica el contenido original de la base de datos.

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

Crear una página de configuración de administración sencilla

Para que los usuarios puedan personalizar el texto que se añade al final de los artículos, necesitamos crear una página de configuración para el plugin. Esto implica varios pasos: registrar el menú, crear funciones de respuesta para la página y procesar los datos del formulario.

En primer lugar, utiliceadmin_menuSe ha añadido una página de menú secundario al gancho (hook).

// 添加插件设置菜单到后台
function mfp_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',    // 权限要求
        'my-first-plugin',   // 菜单slug
        'mfp_options_page_html' // 显示页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

A continuación, se define la función de callback.mfp_options_page_htmlSe utiliza el formulario HTML de la página de configuración para renderizar los datos. Además, es necesario utilizar la API de configuración de WordPress para registrar, guardar y recuperar opciones de manera segura. Para mantener la brevedad, a continuación se presenta una versión simplificada de la implementación:

Lecturas recomendadas Guía completa para el desarrollo de plugins para WordPress: desde los principios hasta la creación de extensiones de nivel profesional

// 设置页面的HTML内容
function mfp_options_page_html() {
    // 检查用户权限
    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( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    <?php
}

// 初始化插件设置
function mfp_settings_init() {
    // 注册一个设置
    register_setting( 'mfp_options_group', 'mfp_footer_text' );

// 添加一个设置区域
    add_settings_section(
        'mfp_section',
        '自定义文本设置',
        null,
        'my-first-plugin'
    );

// 向区域中添加字段
    add_settings_field(
        'mfp_field_footer',
        '文章页脚文本',
        'mfp_field_footer_html',
        'my-first-plugin',
        'mfp_section'
    );
}
add_action( 'admin_init', 'mfp_settings_init' );

// 渲染文本输入字段
function mfp_field_footer_html() {
    $option = get_option( 'mfp_footer_text', '感谢阅读!本文由“我的第一个插件”为您呈现。' );
    ?>
    <input type='text' name='mfp_footer_text' value='<?php echo esc_attr( $option ); ?>' class='regular-text'>
    <p class="description">El contenido que se ingrese aquí se mostrará al final de cada artículo.</p>
    ¿php?  
}

Finalmente, modifique lo anterior.mfp_append_to_contentFunción para recuperar información de las opciones de la base de datos.mfp_footer_textSe lee el texto desde un archivo en lugar de utilizar texto codificado de forma fija (es decir, texto que no ha sido modificado directamente en el código fuente).

Seguridad, optimización y preparación para la publicación de complementos.

En la última etapa del desarrollo, es necesario prestar atención a la seguridad, la calidad del código y el proceso de implementación, a fin de garantizar que el complemento (plugin) sea robusto y funcional.

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.

Seguir las mejores prácticas de seguridad.

Todos los datos ingresados por los usuarios deben ser escapados o verificados antes de ser enviados al navegador o almacenados en la base de datos. Al momento de la salida, se debe utilizar…esc_html()esc_attr()esc_url()Funciones como estas. Se utilizan al procesar el envío de formularios o solicitudes AJAX.wp_verify_nonce()Ycheck_admin_referer()Se utiliza para verificar la legitimidad de las solicitudes y prevenir ataques de falsificación de solicitudes entre sitios (CSRF, Cross-Site Request Forgery). Nunca debes confiar directamente en las solicitudes recibidas.$_GET$_POSTo$_REQUESTLos datos contenidos en…

Implementar soporte para internacionalización

Para que el complemento pueda ser utilizado por usuarios de todo el mundo, es necesario internacionalizar todas las cadenas de texto dirigidas al usuario en el código. Ya lo hemos hecho en los ejemplos anteriores._e()Se necesita una función para generar el texto traducido. Además, es necesario declarar esto en el encabezado de las notas del complemento (plugin).Text DomainYDomain Path
Durante la inicialización del plugin (por ejemplo, a través de...plugins_loaded(Gancho), usarload_plugin_textdomain()Función para cargar los archivos de idioma:

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

Luego, puedes utilizar herramientas como Poedit para extraer las cadenas de texto del código fuente del plugin.__()_e()(Cadena de caracteres envuelta en funciones como `wait()`, etc.), generada.potArchivo de plantilla para que lo creen los traductores.poY.moDocumentos.

Organización del código y consideraciones de rendimiento

A medida que las funciones de los plugins aumentan, no deberíamos acumular todo el código en el archivo principal. Lo más adecuado es dividir el código en módulos funcionales y distribuirlo en archivos separados..phpEstos archivos se encuentran dentro del documento principal y se incluyen de manera selectiva a través de este último. Por ejemplo, es posible crear…includes/admin/El directorio contiene el código relacionado con el backend.includes/public/Almacena el código relacionado con el front end.includes/class-*.phpAlmacena las definiciones de las clases.
Para operaciones que requieren muchos recursos, considere utilizar el caché transitorio de WordPress (Transients API) para almacenar los resultados de consultas que toman mucho tiempo, o emplear tareas programadas (Cron API) para procesar tareas que no son de carácter inmediato en segundo plano. Asegúrese de que los plugins puedan desinstalarse de manera correcta cuando se desactivan, a través de los ganchos de desinstalación registrados.register_uninstall_hook()Limpie los datos y opciones que se han creado para mantener el sitio ordenado y organizado.

resúmenes

A través de este tutorial, completamos el proceso de creación de un plugin para WordPress desde cero hasta que esté completamente funcional. Comenzamos entendiendo la estructura básica de los plugins y configurando el entorno de desarrollo, luego creamos el archivo principal que incluye las cabeceras de comentarios estándar. Posteriormente, lo implementamos mediante el procedimiento de montaje (mounting).admin_noticesYthe_contentEstos dos hooks centrales permiten la implementación de notificaciones en el backend y la personalización del texto que se muestra en el pie de página de los artículos. Para mejorar la utilidad del plugin, incorporamos la API de configuraciones de WordPress y creamos una página de administración que permite a los usuarios modificar dicho texto de forma personalizada. Finalmente, analizamos prácticas de seguridad esenciales en el desarrollo de plugins, así como soporte para la internacionalización y optimizaciones en la organización del código. Este proceso ilustra claramente el paradigma central del desarrollo de plugins para WordPress: utilizar los diversos hooks y filtros para agregar funcionalidades, seguir las especificaciones de la API para diseñar interfaces, y dar siempre prioridad a la seguridad y la mantenibilidad. Al dominar estos conceptos básicos, ya estarás listo para explorar el mundo de los plugins más complejos.

FAQ Preguntas más frecuentes

¿Qué conocimientos previos se necesitan para desarrollar un plugin de WordPress?

Es esencial que cuentes con una sólida base en programación PHP, ya que el código de los plugins está escrito principalmente en este lenguaje. Además, debes tener un conocimiento básico de HTML, CSS y JavaScript para poder manejar la presentación y la interacción en la parte frontal de la página web. Es crucial estar familiarizado con los conceptos fundamentales de WordPress, como los temas, los tipos de artículos y los sistemas de clasificación, en particular con su sistema de ganchos (Hooks), que incluye acciones y filtros.

###
¿Qué archivos deben incluirse, como mínimo, en un plugin para WordPress?

En el caso más básico, un plugin puede contener solo un archivo PHP. No obstante, este archivo debe incluir en su parte superior los encabezados de información del plugin (Plugin Headers) que cumplan con los estándares de WordPress, como los que se muestran en nuestro ejemplo.Plugin NameDescriptionEstos campos son la única información que permite a WordPress reconocer un plugin y mostrarlo en la lista de administración de plugins.

###
¿Cómo debo nombrar las funciones y variables de mi plugin?

Para evitar conflictos con el código del núcleo de WordPress, los temas o otros plugins, todas las funciones personalizadas, clases, variables y constantes deben utilizar un prefijo único. Se recomienda utilizar un prefijo relacionado con la abreviatura o el nombre corto del plugin; por ejemplo, como se hace en nuestro ejemplo.mfp_(En representación de “My First Plugin”). Los nombres de las clases también deben seguir esta regla y, siempre que sea posible, utilizar nombres completos y significativos.

###
¿Las tablas de bases de datos o opciones creadas dentro de un plugin se eliminan después de que el plugin sea desinstalado?

Por defecto, no. Si lo haces a través de…add_option()update_option()Las opciones creadas o las tablas de datos personalizadas generadas permanecerán en la base de datos si el usuario elimina los archivos del plugin a través de la interfaz administrativa de WordPress. Para ofrecer una experiencia de desinstalación limpia, es recomendable utilizar…register_uninstall_hook()Se proporciona una función para registrar una función de callback de limpieza, la cual elimina todas las opciones relacionadas con los plugins, las tablas de la base de datos y los cachés temporales.

###
¿Cómo puedo hacer que mi plugin sea compatible con más versiones de WordPress?

En el código, evita utilizar versiones demasiado recientes de PHP o funciones específicas de WordPress. Antes de utilizar una función, clase o hook, consulta su documentación oficial para saber en qué versión de WordPress fue introducida. Puedes hacerlo añadiendo comentarios en la cabecera del archivo principal del plugin.Requires at least:Se declara la versión mínima de WordPress soportada para el campo. En el código, esto puede combinarse con instrucciones condicionales para garantizar que solo se utilicen funciones o características compatibles con esa versión.function_exists()oclass_exists()Realiza una verificación para ofrecer una solución de downgrade o un mensaje amigable al usuario.