Introducción al desarrollo de plugins de WordPress: desde cero, crea tu primera extensión de funcionalidad.

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

Introducción al desarrollo de plugins de WordPress: desde cero, crea tu primera extensión de funcionalidad.

Estructura básica y organización de archivos de los plugins de WordPress

Un plugin estándar de WordPress generalmente consta de un archivo principal. El nombre de este archivo principal es de suma importancia y, por lo general, coincide con el nombre del directorio en el que se encuentra el plugin. Por ejemplo, para un plugin llamado “my-awesome-plugin”, su archivo principal podría llamarse…my-awesome-plugin.phpEn este archivo, las notas de cabecera del plugin son esenciales, ya que sirven para proporcionar al sistema de WordPress la información básica sobre el plugin.

/**
 * Plugin Name:      我的第一个插件
 * Plugin URI:       
 * Description:      这是一个用于演示的WordPress插件。
 * Version:          1.0.0
 * Author:           你的名字
 * License:          GPL v2 or later
 * Text Domain:      my-first-plugin
 */

Se recomienda que el directorio de plugins cuente con un nombre único para evitar conflictos con plugins ya existentes, y que se ubique en una ubicación adecuada./wp-content/plugins/Dentro del directorio, además del archivo PHP principal, también pueden encontrarse carpetas como `assets` para almacenar JavaScript y CSS, la carpeta `languages` para el manejo de la internacionalización, y la carpeta `templates` para los diseños de las páginas (templates). Una estructura de archivos clara y organizada es esencial para una mejor gestión del proyecto.includes/Se utiliza para las clases y funciones centrales.admin/Se utiliza para la lógica del lado backend.public/Se utiliza para la lógica del lado del cliente y puede mejorar significativamente la mantenibilidad del plugin.

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

Implementación de las funciones principales del plugin

La gran ventaja de los plugins de WordPress radica en su sistema flexible de ganchos de acción (Action Hooks) y filtros (Filter Hooks). Los ganchos de acción te permiten ejecutar código personalizado en momentos específicos, como después de la publicación de un artículo o al cargar el menú de administración. Por su parte, los ganchos de filtro te permiten modificar los datos que se transmiten a lo largo del proceso.

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

Una escena común es agregar texto automáticamente al final del contenido de un artículo. Esto se puede lograr mediante…the_contentSe puede lograr esto mediante el uso de filtros. En el archivo principal del plugin, puedes definir una función y utilizarla para realizar la necesaria filtración de datos.add_filterLa función lo monta en el filtro.

function myplugin_add_footer_text( $content ) {
    if ( is_single() ) {
        $custom_text = '<p><em>La información al final de este artículo fue generada automáticamente por mi plugin.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_footer_text' );

Otra función central es la creación de páginas de administración. WordPress ofrece una amplia gama de funciones para agregar elementos de menú y páginas en el backend. Puedes utilizarlas para personalizar la configuración de tu sitio web según tus necesidades.add_menu_page()oadd_submenu_page()Se utiliza una función para definir una página. Este proceso generalmente consta de dos pasos: primero, se registran los elementos del menú; luego, se define la función de respuesta (callback) correspondiente a esa página de menú para generar el contenido HTML.

function myplugin_add_admin_page() {
    add_menu_page(
        '我的插件设置', // 页面标题
        '我的插件',     // 菜单标题
        'manage_options', // 权限
        'myplugin-settings', // 菜单别名
        'myplugin_admin_page_html', // 回调函数
        'dashicons-admin-generic', // 图标
        20 // 位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_page' );

function myplugin_admin_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">
            
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    ¿php?  
}

Configuración de plugins y manejo de opciones

Para que los plugins sean flexibles y configurables, es una práctica estándar crear una página de configuración. WordPress proporciona una API de configuración sistemática que permite registrar, guardar y verificar las configuraciones de manera segura.

Primero, necesitas utilizar…register_setting()Se utiliza una función para registrar un conjunto de configuraciones. Luego, se procede con su uso.add_settings_section()Añada un bloque de configuración y úselo.add_settings_field()En este bloque, se deben agregar los campos de configuración específicos. Estos pasos suelen realizarse durante…admin_initSe completó en el gancho.

Lecturas recomendadas Análisis del desarrollo de plugins de WordPress: una guía completa para crear módulos de funcionalidad personalizada desde cero.

function myplugin_settings_init() {
    // 注册一个新设置
    register_setting( 'myplugin_options', 'myplugin_settings', 'myplugin_sanitize' );

    // 添加一个设置区块
    add_settings_section(
        'myplugin_section_general',
        '通用设置',
        'myplugin_section_general_cb',
        'myplugin-settings'
    );

    // 添加一个文本字段
    add_settings_field(
        'myplugin_field_footer_text',
        '自定义尾部文本',
        'myplugin_field_footer_text_cb',
        'myplugin-settings',
        'myplugin_section_general',
        [ 'label_for' => 'myplugin_field_footer_text' ]
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染回调函数
function myplugin_field_footer_text_cb() {
    $options = get_option( 'myplugin_settings' );
    ?>
    <input type="text" id="myplugin_field_footer_text" name="myplugin_settings[footer_text]" value="<?php echo esc_attr( $options['footer_text'] ?? '' ); ?>" class="regular-text">
    <?php
}

// 数据清理回调函数
function myplugin_sanitize( $input ) {
    $sanitized = [];
    if ( isset( $input['footer_text'] ) ) {
        $sanitized['footer_text'] = sanitize_text_field( $input['footer_text'] );
    }
    return $sanitized;
}

En el front end, puedes hacerlo a través de…get_option('myplugin_settings')Obtén el array de opciones guardadas y utiliza estos valores en la lógica de tu función.

Seguridad de los complementos y mejores prácticas.

Desarrollar un plugin para distribución pública o uso en entornos de producción, donde la seguridad es el factor más importante. Todos los datos provenientes de los usuarios o de fuentes no confiables deben ser verificados, limpiados y escapados (es decir, procesados de manera que no representen un riesgo para el sistema).

La validación consiste en verificar antes del procesamiento si los datos cumplen con el formato esperado, por ejemplo, utilizando herramientas específicas para comprobar su corrección.filter_var()Verificación de correo electrónico. La “sanitización” (limpieza de datos) se refiere a la eliminación de caracteres no válidos o peligrosos de los datos. WordPress ofrece herramientas para realizar esta tarea, como…sanitize_text_field()sanitize_email()wp_kses_post()Hay muchas funciones de limpieza disponibles. El “escape” (o escape de caracteres) se refiere al proceso de codificar de manera segura los datos antes de enviarlos a HTML, JavaScript o URL, con el fin de prevenir ataques XSS (Cross-Site Scripting). Para ello, se deben utilizar los métodos adecuados de codificación.esc_html()esc_attr()esc_url()Ywp_json_encode()y otras funciones.

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

Al manejar solicitudes que no son de tipo CE (AJAX) dentro de un plugin, es esencial realizar una comprobación exhaustiva.nonce(Número utilizado una vez) Para verificar la legitimidad de la solicitud y comprobar los permisos (capacidades) del usuario actual.

// PHP端:生成nonce并输出到页面
wp_nonce_field( 'myplugin_ajax_action', 'myplugin_nonce' );

// JavaScript端:随AJAX请求发送nonce
jQuery.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
        action: 'myplugin_ajax_handler',
        nonce: jQuery('#myplugin_nonce').val(),
        // ... 其他数据
    }
});

// PHP端:处理AJAX请求时验证
function myplugin_ajax_handler() {
    check_ajax_referer( 'myplugin_ajax_action', 'nonce' );
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_die( '权限不足' );
    }
    // ... 处理安全请求
}
add_action( 'wp_ajax_myplugin_ajax_handler', 'myplugin_ajax_handler' );

Además, se cumplen con los estándares de codificación de WordPress y se ofrece un soporte completo para la internacionalización (utilizando…).__()Y_e()Función, y usarla.load_plugin_textdomain()Cargar los archivos de traducción, así como realizar la limpieza necesaria de recursos cuando el complemento está desactivado (por ejemplo, a través de ciertos procedimientos).register_uninstall_hook()Las opciones para eliminar bases de datos son prácticas óptimas e indispensables en el desarrollo de plugins profesionales.

resúmenes

El desarrollo de plugins para WordPress es un proceso que consiste en integrar funciones personalizadas de manera fluida en la vasta ecosistema de este sistema de gestión de contenidos (CMS). Todo comienza con un directorio de plugins bien estructurado y un archivo principal que contenga las anotaciones de cabecera adecuadas. La clave radica en utilizar de manera experta los ganchos de acciones y filtros para extender el comportamiento predeterminado de WordPress, y en proporcionar una interfaz de configuración amigable para los usuarios a través de páginas de administración y APIs de configuración. Durante todo el proceso, la seguridad debe ser la prioridad principal, lo que implica realizar verificaciones de datos, limpieza de datos, escape de caracteres y comprobaciones de permisos. Seguir las mejores prácticas de internacionalización y estándares de codificación asegurará que tu plugin sea estable, seguro y fácil de mantener, permitiéndole funcionar de manera fiable en millones de sitios web.

Lecturas recomendadas Desde cero: Guía completa de introducción y tutorial práctico para el desarrollo de plugins para WordPress

FAQ Preguntas más frecuentes

¿Qué conocimientos previos se necesitan para desarrollar plugins para WordPress?

Es esencial que cuentes con una sólida base en programación PHP; comprender los conceptos de programación orientada a objetos (POO) será de gran ayuda. 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 del sitio web. Lo más importante es estar familiarizado con los conceptos centrales de WordPress, como los ganchos (Hooks), la API de Opciones (Options), los roles y permisos de usuarios, así como la estructura de la base de datos.

¿Cómo depurar un plugin de WordPress en desarrollo?

En primer lugar, asegúrate de que enwp-config.phpEl archivo está activado (o configurado para funcionar).WP_DEBUGYWP_DEBUG_LOGEsto registrará el mensaje de error en…/wp-content/debug.logEl archivo se encuentra dentro del sistema, pero no se muestra al usuario final (es decir, al usuario que interactúa con la interfaz de usuario).

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.

Al utilizar herramientas como el plugin Query Monitor, es posible ver en tiempo real las consultas a la base de datos, la ejecución de los hooks, los errores de PHP y los datos de rendimiento. Para el depurado lógico, se puede combinar este uso con otras técnicas de desarrollo.error_log()Se puede realizar un seguimiento paso a paso de la ejecución de una función utilizando herramientas de depuración profesionales para PHP, como Xdebug.

¿Cómo debo agregar tablas de base de datos personalizadas a mi plugin?

Solo se deben considerar la adición de tablas personalizadas cuando la estructura de las tablas de datos del núcleo de WordPress no cumpla con las necesidades. Puedes crear estas tablas al activar un plugin, generalmente mediante la registración de una función que se ejecuta en ese momento.

En esta función, se utiliza…dbDelta()Esta función permite crear o actualizar la estructura de una tabla de manera segura. Es necesario que se proporcione toda la información necesaria para que la función pueda realizar su tarea de manera correcta.CREATE TABLE Las instrucciones SQL se han diseñado con mucha cuidado, y el manejo de los cambios en la estructura de la tabla también se ha realizado de manera muy prudente. La instrucción SQL que necesitas puede obtenerse a través de una variable global.$wpdbEjecutar.

¿Cómo puedo hacer que mi plugin sea compatible con múltiples idiomas (internacionalización)?

Primero, defina en las notas al principio del archivo principal del plugin:Text Domainy utilizarlo cuando se carga el pluginload_plugin_textdomain()La función carga los archivos de traducción. En el plugin, todas las cadenas de texto que necesitan ser traducidas se utilizan…__()(Regresar a la cadena de traducción) o_e()Se envuelve la función en un contenedor (una clase, un módulo, etc.). Luego, puedes utilizar herramientas como Poedit para generar el código necesario..potArchivo de plantilla, utilizado por los traductores para crear contenido en un idioma específico..poY.moDocumentos.