Guía completa para el desarrollo de plugins para WordPress: Cómo crear plugins de extensión profesionales desde cero

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

Fundamentos de plugins para WordPress y entorno de desarrollo

Para desarrollar un plugin para WordPress, primero es necesario entender qué es un plugin. Esencialmente, un plugin consiste en una o más archivos PHP que contienen comentarios de cabecera en un formato específico, que sirven para identificar su función dentro de WordPress. Estos plugins permiten extender o modificar las funcionalidades básicas de WordPress mediante la API amplia que ofrece el mismo (como ganchos de acción, filtros, funciones de base de datos, etc.), sin necesidad de modificar el código central del sistema.

Para comenzar a desarrollar, necesitas un entorno de desarrollo local. Esto generalmente incluye un servidor local (como XAMPP, MAMP o Local by Flywheel), PHP (en una versión que coincida con los requisitos de WordPress), una base de datos MySQL y un editor de código (como VS Code o PhpStorm). Se recomienda encarecidamente desarrollar y depurar en el entorno local para evitar afectar al sitio web en línea.

Estructura básica de los archivos de un plugin

Un plugin muy simple puede constar de un solo archivo. No obstante, para que el código sea más claro y fácil de mantener, se recomienda seguir una estructura determinada. Un directorio típico de un plugin puede incluir: el archivo principal del plugin (por ejemplo…your-plugin-name.php), unoincludesUna carpeta (que alberga las clases o funciones relacionadas con las funciones principales), una…adminCarpeta (que alberga el código relacionado con el backend), unapublicCarpeta (para almacenar el código relacionado con el front end), unaassetsUna carpeta que alberga archivos de JavaScript, CSS e imágenes, así como paquetes de idiomas y carpetas de plantillas (opcionales).

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

El archivo principal del plugin es el punto de entrada para su funcionamiento, y las notas incluidas en su cabecera son de vital importancia. WordPress lee estas notas para mostrar información sobre el plugin en la interfaz de administració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).

Crea tu primer complemento

Comencemos con un ejemplo clásico de “Hello World”; esto te ayudará a familiarizarte con el proceso básico y las normas para crear plugins.

Escribir el archivo del plugin principal

Primero, en el directorio de instalación de WordPress:wp-content/pluginsDentro de la carpeta, cree una nueva carpeta, por ejemplo…my-first-pluginDentro de esa carpeta, cree un archivo PHP y nómele…my-first-plugin.php

Abra este archivo e ingrese el siguiente código. El bloque de información del plugin (Plugin Header) es obligatorio, ya que indica a WordPress que se trata de un plugin.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个学习插件开发的示例插件,它将在文章内容顶部显示“Hello World!”。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

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

/**
 * 在文章内容前添加“Hello World”
 *
 * @param string $content 原始文章内容。
 * @return string 修改后的文章内容。
 */
function mfp_add_hello_world( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $custom_text = &#039;<p style="background-color:#f0f0f0; padding:10px;"><strong>¡Hola, Mundo! Este es mi primer plugin.</strong></p>';
        return $custom_text . $content;
    }
    return $content;
}
add_filter( 'the_content', 'mfp_add_hello_world' );

Después de guardar el archivo, inicie sesión en la página de administración de su WordPress y vaya a la sección de “Plugins”. Debería ver que “Mi primer plugin” aparece en la lista de plugins. Actívelo y, a continuación, visite un artículo de su sitio web. Notará que el párrafo “¡Hola Mundo!” se ha añadido al principio del contenido del artículo.

Lecturas recomendadas Te enseñaremos paso a paso a dominar el desarrollo de plugins para WordPress, desde cero.

Comprender los elementos clave en el código

Este código demuestra un concepto central del desarrollo en WordPress: los filtros (Filters). Hemos definido una función…mfp_add_hello_worldRecibe el contenido del artículo.$contentComo parámetro, y luego devolvemos el contenido modificado. Después, lo utilizamos…add_filter()La función monta esta función personalizada en el núcleo de WordPress.the_contentEste filtro está activado; WordPress lo está ejecutando en este momento.the_content()En ese momento, se ejecutarán en orden todas las funciones que estén montadas en este gancho, lo que nos permite modificar la salida.

Las condiciones de evaluación en el códigois_single() && in_the_loop() && is_main_query()El objetivo es asegurar que nuestras modificaciones solo afecten al artículo específico en la consulta principal, sin influir en la página de lista de artículos u en otras partes del sitio. Esta es una práctica importante para desarrollar plugins eficientes y sin efectos secundarios.

Técnicas centrales de desarrollo de plugins

Para desarrollar plugins profesionales y potentes, es esencial dominar algunas de las APIes centrales que ofrece WordPress.

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

Usar ganchos de acción (action hooks) y ganchos de filtro (filter hooks)

Los ganchos (Hooks) son la piedra angular de la arquitectura de plugins de WordPress. Se dividen en dos tipos: Acciones (Actions) y Filtros (Filters). Los ganchos de acción se activan en puntos específicos de ejecución (como al publicar un artículo o al cargar la interfaz de administración), lo que te permite “ejecutar” cierto código. Por su parte, los ganchos de filtro te permiten “modificar” datos (como el contenido del artículo o su título) antes de que WordPress los utilice.

utilizaradd_action()Aquí viene la acción de montaje. Por ejemplo, crear tablas en una base de datos cuando un complemento (plugin) se activa es una necesidad común.

function mfp_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'my_custom_data';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        data varchar(255) NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY (id)
    ) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'mfp_create_custom_table' );

Aquí se ha utilizado…register_activation_hookSe trata de una función de registro especial que se utiliza para especificar las acciones que deben ejecutarse cuando un complemento (plugin) se activa.

Lecturas recomendadas Comenzando desde cero: ¿por qué elegir el desarrollo de plugins para WordPress?

Crear un menú de administración y una página de configuración

Proporcionar una página de configuración en el backend para tu plugin es un signo distintivo de un plugin profesional. El uso de la API de Configuraciones (Settings API) de WordPress permite crear páginas de opciones de manera segura y conforme a los estándares establecidos.

El siguiente código demuestra cómo agregar una página de menú secundario bajo el menú principal “Ajustes”:

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.
// 在管理后台初始化时添加菜单
add_action( 'admin_menu', 'mfp_add_admin_menu' );

function mfp_add_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',        // 所需权限
        'my-plugin-settings',    // 菜单slug
        'mfp_render_settings_page' // 用于渲染页面的回调函数
    );
}

function mfp_render_settings_page() {
    ?&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
            settings_fields( 'mfp_settings_group' ); // 输出安全字段
            do_settings_sections( 'my-plugin-settings' ); // 输出设置区域
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    <?php
}

// 初始化设置
add_action( 'admin_init', 'mfp_settings_init' );

function mfp_settings_init() {
    register_setting( 'mfp_settings_group', 'mfp_options' ); // 注册一个设置选项组

add_settings_section(
        'mfp_section_basic',
        '基本设置',
        null,
        'my-plugin-settings'
    );

add_settings_field(
        'mfp_field_text',
        '示例文本框',
        'mfp_field_text_render',
        'my-plugin-settings',
        'mfp_section_basic'
    );
}

function mfp_field_text_render() {
    $options = get_option( 'mfp_options' );
    ?>
    <input type='text' name='mfp_options[text_field]' value='<?php echo esc_attr( $options['text_field'] ?? '' ); ?>'>
    <p class="description">Este es un ejemplo de cuadro de texto.</p>
    ¿php?  
}

Seguridad de los plugins, internacionalización y preparación para su publicación

Los complementos (plugins) que hayan sido desarrollados deben someterse a medidas de fortalecimiento de seguridad, adaptación a diferentes idiomas (internacionalización) y ser empacados de manera adecuada antes de ser publicados para su uso por el público.

Validación de datos, escape y seguridad

Nunca confíes en la información introducida por los usuarios o en datos externos. Todo lo que provenga de…$_GET$_POST$_REQUESTLos datos obtenidos de una base de datos también deben ser verificados y escapados antes de su uso.

  • Verificación: Comprobar si los datos cumplen con el formato esperado (por ejemplo, si son una dirección de correo electrónico, un número, etc.). Utiliza funciones como…is_email()intval()sanitize_text_field()
  • Escape: Al exportar datos a HTML, JavaScript o URL, asegúrese de que los caracteres especiales se procesen correctamente para evitar ataques de XSS. Utilice funciones comoesc_html()esc_js()esc_url()wp_kses_post()

En las consultas SQL, es obligatorio utilizar…$wpdb->prepare()Se utilizan métodos específicos para preparar los parámetros con el fin de prevenir inyecciones SQL.

Implementar la internacionalización del complemento

La internacionalización (i18n) permite que tus plugins sean traducidos a otros idiomas. Esto requiere dos pasos: marcar las cadenas de texto que pueden ser traducidas y cargar los campos de texto correspondientes.

En primer lugar, se ha definido esto en la parte superior del archivo del plugin principal.Text DomainYDomain PathLuego, en todos los lugares del plugin donde haya cadenas de texto que necesiten ser traducidas, se deben envolver en la función de traducción correspondiente. Por ejemplo:__('Hello World', 'my-first-plugin')Se utiliza para mostrar las traducciones en PHP.esc_html_e('Settings', 'my-first-plugin')Se utiliza para escapar y mostrar el contenido de manera tal que se visualice correctamente.

Durante la inicialización del plugin (por ejemplo, al usarlo)...initAcción); es necesario cargar el archivo de traducción:

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

Después de eso, puedes utilizar herramientas como Poedit para crear lo que necesitas..potArchivo de plantilla para que lo creen los traductores.po/.moArchivos de idioma.

Revisión final y empaquetado

Antes de publicar, por favor realice las siguientes comprobaciones:
1. El código cumple con los estándares de codificación de WordPress.
2. Todas las funciones han sido completamente probadas, incluyendo su activación, desactivación y desinstalación.register_uninstall_hook(Limpieza de datos).
3. Se ha eliminado todo el código de depuración y la salida temporal.
4. Se ha creado un documento detallado.readme.txtEl archivo debe cumplir con los requisitos oficiales de WordPress; de lo contrario, no se mostrará en la página del directorio de plugins.
5. Asegúrese de que el nombre del directorio de los plugins y el nombre del archivo principal sean únicos para evitar conflictos con otros plugins.

Finalmente, compresa todo el folder del plugin en un archivo ZIP. Así podrás cargarlo y instalarlo directamente desde la interfaz administrativa de WordPress, o enviarlo al directorio oficial de plugins de WordPress.

resúmenes

El desarrollo de plugins para WordPress es un proceso que convierte las ideas en funciones reales, y se basa en una comprensión profunda de la arquitectura central de WordPress, en particular de su API de ganchos (hooks). Comenzar con la creación de un plugin sencillo como “Hello World” es el primer paso para aprender cómo construir interfaces de administración, manejar datos de manera segura, interactuar con bases de datos y, finalmente, implementar funciones de internacionalización. Este es el camino de crecimiento para todo desarrollador de plugins. Seguir las normas de codificación segura y utilizar interfaces estándar como la API de Configuraciones (Settings API) es clave para garantizar la calidad, compatibilidad y seguridad de los plugins. A través de la práctica constante y el estudio del código central de WordPress, así como de otros plugins de calidad, podrás crear extensiones profesionales, fiables y populares.

FAQ Preguntas más frecuentes

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

Es esencial que cuentes con conocimientos básicos de programación en PHP, así como de HTML, CSS y JavaScript. Ser familiarizado con las operaciones básicas de WordPress (gestión de artículos, páginas y menús) y tener un entendimiento de sus conceptos clave (como tipos de artículos, taxonomías y metadatos) te ayudará mucho en el desarrollo de aplicaciones. También será de gran utilidad tener conocimientos básicos de la base de datos MySQL.

¿Cómo depuro mi plugin para WordPress?

En primer lugar, asegúrate de que enwp-config.phpEl archivo se abrió en el programa.WP_DEBUGYWP_DEBUG_LOGDe esta manera, los mensajes de error se registrarán en el archivo de registro (log) en lugar de ser mostrados directamente a los visitantes. En segundo lugar, se puede utilizar…error_log()La función escribe información de depuración personalizada en el registro. Para lógicas complejas, la forma más eficiente es utilizar herramientas de depuración profesionales como Xdebug en combinación con un entorno de desarrollo integrado (IDE), como PHPStorm.

¿Cómo puede mi plugin comunicarse con servicios de terceros (como API)?

WordPress ofrece una potente API HTTP (como…)wp_remote_get()wp_remote_post()Se utiliza para manejar solicitudes HTTP y es más eficiente que las funciones nativas de PHP.file_get_contents()O bien, cURL puede ser más seguro y tener mejor compatibilidad. Al utilizar estas funciones, recuerde manejar posibles errores y establecer tiempos de espera (timeout) adecuados. Para API que se deben llamar con frecuencia, considere utilizar la tecnología de caché de Transients para mejorar el rendimiento.

¿Cómo deberían nombrarse las clases y las funciones dentro de un plugin para evitar conflictos?

Para evitar conflictos con los nombres de funciones y clases de otros plugins o temas, es necesario utilizar un prefijo único. Se recomienda utilizar la abreviatura o el nombre completo del plugin como prefijo. Por ejemplo, si tu plugin se llama “Super Tool”, el nombre de una función podría ser algo como…stool_save_data()Los nombres de las clases pueden ser…Super_Tool_AdminOtra forma más moderna y segura es utilizar los espacios de nombres (Namespaces) de PHP, lo que requiere que el entorno en el que se ejecuta tu plugin soporte PHP 5.3 o una versión más reciente.