La estructura básica y la creación de complementos de WordPress.

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

La estructura básica y la creación de complementos de WordPress.

Desarrollar un plugin para WordPress comienza con un archivo PHP sencillo. Este archivo principal debe contener ciertas anotaciones de cabecera (headers) para que WordPress lo reconozca y lo pueda administrar como un plugin. El plugin más básico puede constar de un solo archivo. my-first-plugin.php

<?php
/**
 * Plugin Name: 我的第一个插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于演示的简单WordPress插件。
 * Version:     1.0.0
 * Author:      开发者姓名
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

El campo “Nombre del Plugin” en las notas del encabezado del archivo es obligatorio; el resto de la información es opcional. Una vez que el plugin se activa, sus funciones se implementan mediante la ejecución de funciones PHP en los momentos adecuados. Una de las formas más comunes de hacerlo es utilizando “ganchos de acción” (action hooks). Por ejemplo, para agregar un texto en el pie de página de una página web, se puede utilizar… wp_footer Gancho.

// 在页脚输出自定义内容
function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">¡Gracias por usar mi plugin!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

add_action Es una función central de WordPress que se utiliza para conectar funciones personalizadas a los ganchos de acción (action hooks) especificados. Se recomienda generalmente colocar el directorio de plugins en… /wp-content/plugins/your-plugin-name/ Además del archivo principal, también se pueden incluir archivos de recursos como CSS, JavaScript, imágenes, etc.

Lecturas recomendadas Guía definitiva de temas de WordPress: una solución completa desde la selección y la personalización hasta el desarrollo.

¿Cómo agregar un menú de administración a un plugin?

Para que un plugin cuente con una página de configuración en el backend de WordPress, es necesario agregarle un menú de administración. Esto se suele hacer mediante… admin_menu Se realiza mediante ganchos de acción (action hooks).

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

Funciones principales add_menu_page Se utiliza para agregar un elemento de menú principal en el sidebar del lado posterior, junto con la página de configuración correspondiente a dicho menú.

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',      // 页面标题
        '我的插件',          // 菜单标题
        'manage_options',    // 所需权限
        'myplugin-settings', // 菜单slug
        'myplugin_settings_page', // 显示页面的回调函数
        'dashicons-admin-generic', // 图标(可选)
        6                    // 菜单位置(可选)
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 设置页面的HTML内容
function myplugin_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( 'myplugin_options' ); // 输出安全字段
            do_settings_sections( 'myplugin-settings' ); // 输出设置区域
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    ¿php?  
}

Después de crear el menú, el siguiente paso es utilizar la API de configuración de WordPress para definir las opciones específicas que se pueden configurar.

Utilizar la API de configuración para guardar la configuración del plugin.

Tratar manualmente los envíos de formularios y las verificaciones de seguridad es un proceso tedioso y propenso a errores. La API de configuración de WordPress ofrece un conjunto de métodos estandarizados para registrar, renderizar y guardar las configuraciones. Esto implica principalmente tres funciones:register_setting, add_settings_section Y add_settings_field

El siguiente ejemplo demuestra cómo registrar un grupo de opciones y agregar un campo de texto.

Lecturas recomendadas Guía para optimizar el rendimiento del sitio web de WordPress: análisis en profundidad y estrategias prácticas.

function myplugin_settings_init() {
    // 注册一个新的设置项到数据库 `wp_options` 表中
    register_setting( 'myplugin_options', 'myplugin_settings' );

    // 在设置页面添加一个新的区域
    add_settings_section(
        'myplugin_section_basic', // 区域ID
        '基础设置',                // 区域标题
        'myplugin_section_callback', // 区域说明的回调函数
        'myplugin-settings'       // 对应的页面slug
    );

    // 在区域中添加一个字段
    add_settings_field(
        'myplugin_field_text',    // 字段ID
        '示例文本',                // 字段标题
        'myplugin_field_text_cb', // 字段HTML输出的回调函数
        'myplugin-settings',      // 页面slug
        'myplugin_section_basic'  // 区域ID
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 区域说明的回调函数
function myplugin_section_callback() {
    echo '<p>Esta es la zona de configuración básica para los plugins.</p>';
}

// 文本字段的回调函数
function myplugin_field_text_cb() {
    // 从数据库中获取之前保存的设置值
    $options = get_option( 'myplugin_settings' );
    $value = $options['myplugin_field_text'] ?? ''; // 使用空合并运算符提供默认值
    // 输出HTML输入框
    echo '<input type="text" name="myplugin_settings[myplugin_field_text]" value="' . esc_attr( $value ) . '" class="regular-text">';
    echo '<p class="description">Por favor, ingrese algunos ejemplos de texto.</p>';
}

Los valores de configuración guardados de esta manera pueden ser utilizados en cualquier parte del código del plugin. get_option('myplugin_settings') Obtener y utilizar de manera segura.

Seguridad y buenas prácticas en el desarrollo de plugins

La seguridad es de suma importancia en el desarrollo de plugins. Un plugin inseguro puede convertirse en una vulnerabilidad para todo el sitio web. El principio fundamental es: nunca confíes en los datos introducidos por los usuarios. Todos los datos provenientes de los usuarios o de fuentes externas deben ser verificados, limpiados o escapados antes de ingresar a la base de datos, al sistema de archivos o de ser mostrados en las páginas.

Validación y limpieza de datos

La validación es el proceso de comprobar si los datos introducidos cumplen con un formato esperado, por ejemplo, si se trata de una dirección de correo electrónico, un número o si se encuentra dentro de un rango específico. WordPress ofrece una serie de funciones de ayuda para ello. is_email(), absint()La limpieza consiste en eliminar, sobre la base de la validación, cualquier carácter ilegal o inseguro del dato. Para los campos de texto, se pueden utilizar métodos específicos para realizar esta tarea. sanitize_text_field()

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%.
// 在处理表单提交时
$user_input = $_POST['some_field'] ?? ''; // 使用空合并运算符避免未定义索引警告
// 清理输入
$clean_input = sanitize_text_field( $user_input );
// 验证是否是正整数
$clean_id = absint( $_POST['post_id'] );
if ( $clean_id <= 0 ) {
    // 处理无效ID的错误
}

Los datos antes de la salida han sido escapados adecuadamente.

El escape es el proceso que asegura que los datos se visualicen de manera segura en diferentes entornos (como HTML, JavaScript, URL, etc.). Esto es de vital importancia para prevenir ataques de tipo Cross-Site Scripting (XSS). WordPress ofrece funciones de escape muy potentes:
* esc_html()Se utiliza para escapar el contenido HTML, evitando que los etiquetas HTML presentes en dicho contenido sean interpretadas por el sistema.
* esc_attr()Se utiliza para escapar los valores de los atributos de las etiquetas HTML.
* esc_url()Se utiliza para escapar los caracteres especiales en una URL.
* wp_kses_post()Permite la salida segura de parte del contenido HTML a través de un conjunto de reglas definidas.

// 在设置页面或前端输出用户数据时
echo '<div class="notice">'`. esc_html($clean_input)`.'</div>'echo '<input type="hidden" value="' . esc_attr( $clean_input ) . '">'echo '<a href="/es/' . esc_url( $user_url ) . '/">enlace</a>';
echo wp_kses_post( $allowed_html_content ); // 允许文章级别的HTML标签

Además, al manejar consultas a la base de datos, se debe utilizar siempre la clase de base de datos de WordPress. $wpdb Los métodos de preprocesamiento, o el uso de API más avanzadas como… WP_QueryIncluyen protección contra inyecciones SQL de forma integrada. Al realizar operaciones con archivos, se utiliza… wp_upload_dir()wp_handle_upload() Se utilizan API específicas para garantizar la seguridad de los caminos (rutas) de acceso.

Utilizar ganchos (hooks) para lograr una gran escalabilidad.

El núcleo del sistema de plugins de WordPress es el mecanismo de ganchos (hooks), que se compone de “acciones” (actions) y “filtros” (filters). Los ganchos permiten que los plugins modifiquen el comportamiento o los datos de WordPress sin necesidad de modificar el código central, y también facilitan que otros desarrolladores extiendan tus plugins.

Lecturas recomendadas Guía de iniciación para el desarrollo de temas para WordPress: Crea tu primer tema personalizado desde cero

El uso y la creación de ganchos de acción (action hooks)

Los ganchos de acción (action hooks) ejecutan un fragmento de código en un punto específico en el tiempo y no esperan recibir un valor de retorno. Los plugins pueden utilizar los miles de ganchos incorporados que ofrece WordPress. init, wp_enqueue_scripts, save_postTambién es posible crear sus propios ganchos (hooks) para que otros desarrolladores los utilicen.

El código que se monta en el gancho (hook) se muestra a continuación:

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.
// 在文章内容前自动添加一个横幅
function myplugin_prepend_content( $content ) {
    if ( is_single() ) {
        $custom_text = '<div class="myplugin-banner">Este es un anuncio publicitario.</div>';
        $content = $custom_text . $content;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_prepend_content' );

Tenga en cuenta que, aunque hemos modificado el contenido, estamos utilizando los ganchos (hooks) de los filtros. the_contentPorque requiere que se devuelva el valor modificado.

Creación de ganchos de acción personalizados para su uso do_action Función:

// 在你的插件代码中定义一个动作点
function myplugin_complete_task() {
    // ... 执行一些任务 ...
    // 发出自定义动作,允许其他代码在此处添加功能
    do_action( 'myplugin_after_task_complete', $task_id, $result );
}

Otros plugins o temas pueden ser instalados o configurados a través de los canales oficiales de su proveedor o de las instrucciones proporcionadas por el desarrollador. add_action('myplugin_after_task_complete', 'callback', 10, 2) Responda a esta acción.

Principios y ejemplos de los ganchos de filtro (Filter Hooks)

Los ganchos de filtro (filter hooks) se utilizan para modificar los datos antes de que sean utilizados. Reciben un valor y deben devolver otro valor (que puede haber sido modificado). Esta es una forma común de que los plugins modifiquen el texto, las opciones o los resultados de las consultas.

Usar los filtros incorporados:

// 修改文章摘要的长度
function myplugin_excerpt_length( $length ) {
    return 20; // 将摘要字数限制改为20字
}
add_filter( 'excerpt_length', 'myplugin_excerpt_length' );

Creación de ganchos para filtros personalizados (uso) apply_filters Función:

function myplugin_get_price( $product_id ) {
    $base_price = get_post_meta( $product_id, 'price', true );
    // 应用过滤器,允许其他代码动态修改价格(例如添加税费、折扣)
    $final_price = apply_filters( 'myplugin_product_price', $base_price, $product_id );
    return $final_price;
}

De esta manera, tu plugin proporciona una interfaz flexible que permite a otros desarrolladores modificar fácilmente la lógica de cálculo de precios, sin necesidad de modificar el código fuente del plugin directamente.

Internacionalización de plugins y gestión de recursos de scripts

Un plugin de WordPress maduro debe ser compatible con la internacionalización, lo que permite su traducción a diferentes idiomas, así como la gestión adecuada de los recursos CSS y JavaScript, tanto en la parte frontal ( frontend) como en la parte posterior (backend) del sitio web.

Implementar la internacionalización del complemento

La internacionalización se logra al encapsular todas las cadenas de texto que necesitan ser traducidas utilizando funciones específicas. Esto implica dos pasos principales: cargar los archivos de traducción a través de campos de texto y marcar las cadenas de texto que pueden ser traducidas en el código.

Primero, lo que se define en el encabezado del archivo principal del plugin es… Text Domain(Por ejemplo, my-first-pluginEse es tu campo de texto. Luego, durante la inicialización del plugin (generalmente al... init (Gancho), usar load_plugin_textdomain Un funcionamiento automático de carga de archivos de traducción.

function myplugin_load_textdomain() {
    load_plugin_textdomain(
        'my-first-plugin', // 文本域,必须与文件头一致
        false, // 已弃用参数
        dirname( plugin_basename( __FILE__ ) ) . '/languages' // 语言文件存放的相对路径
    );
}
add_action( 'init', 'myplugin_load_textdomain' );

En el código, se utiliza… __() Por favor, proporciona el texto que deseas traducir. _e() Traduzca y emita directamente la cadena de caracteres.

$settings_title = __( 'My Plugin Settings', 'my-first-plugin' );
_e( 'Hello World!', 'my-first-plugin' );

Los desarrolladores pueden utilizarlo. Poedit Herramientas como estas extraen estas cadenas de texto del código fuente y las generan. .pot Archivo de plantilla. .po Y .mo El archivo se encuentra almacenado en el plugin. /languages/ En el directorio.

Introducir correctamente CSS y JavaScript

Nunca codifiques valores de forma directa y fija en un archivo PHP. <link> o <script> Las etiquetas se utilizan para introducir recursos. WordPress proporciona un sistema unificado de gestión de colas (enqueue) para administrar las dependencias de recursos, el control de versiones y el momento de su carga.

En cuanto a los recursos del backend, se utiliza… admin_enqueue_scripts Gancho.

function myplugin_admin_scripts( $hook ) {
    // 只在特定插件设置页面加载
    if ( $hook != 'toplevel_page_myplugin-settings' ) {
        return;
    }
    wp_enqueue_style(
        'myplugin-admin-style', // 句柄
        plugins_url( 'css/admin-style.css', __FILE__ ), // 文件URL
        array(), // 依赖
        '1.0.0'  // 版本号,可用于强制浏览器更新缓存
    );
    wp_enqueue_script(
        'myplugin-admin-script',
        plugins_url( 'js/admin-script.js', __FILE__ ),
        array( 'jquery' ), // 依赖jQuery
        '1.0.0',
        true // 在页脚加载
    );
}
add_action( 'admin_enqueue_scripts', 'myplugin_admin_scripts' );

En cuanto a los recursos frontales, se utiliza… wp_enqueue_scripts Los “ganchos” (hooks), cuya lógica es similar, aseguran que los recursos se carguen de manera ordenada, evitando conflictos y permitiendo el uso de la caché del navegador.

resúmenes

El desarrollo de plugins para WordPress es un proceso sistemático que comienza con la creación de un archivo principal que cumpla con los estándares establecidos. Este proceso abarca varios aspectos, como la construcción de interfaces de administración, el manejo seguro de datos, el uso de los hooks centrales del sistema y el soporte a la internacionalización. Seguir las mejores prácticas, en particular las normas rigurosas de seguridad de datos y una comprensión profunda del mecanismo de hooks, es clave para desarrollar plugins de nivel comercial que sean estables, seguros y escalables. El uso adecuado de la API de configuración y de los recursos de scripts de gestión puede mejorar significativamente la profesionalidad del plugin y la experiencia del usuario. Los desarrolladores deben siempre preparar el código para posibles traducciones, con el fin de ampliar el alcance de aplicación del plugin.

FAQ Preguntas más frecuentes

¿Qué elementos debe incluir el plugin más simple para WordPress?

El complemento más simple solo necesita un archivo PHP, y este archivo debe contener las anotaciones estándar de cabecera de complemento. La línea de anotación más importante es “Nombre del Complemento” (Plugin Name). En este archivo, puedes escribir código PHP directamente o agregar funcionalidades a través de ganchos (hooks).

Por ejemplo, un plugin que contenga solo un código corto que genere la salida “Hello World” también necesitará solo un archivo para funcionar.

¿Cómo interactúan los plugins con la base de datos de WordPress?

Se recomienda utilizar las clases de operación de bases de datos incorporadas en WordPress. $wpdbProporciona métodos seguros para la consulta de datos, especialmente… prepare Este método puede prevenir con eficacia los ataques de inyección de SQL.

Para la mayoría de las operaciones con datos (como obtener artículos o modificar metadatos), se recomienda utilizar las funciones avanzadas de WordPress. get_posts(), WP_Query, get_post_meta(), update_post_meta() Estas funciones ya han resuelto los problemas de seguridad y caché a nivel de base. En cuanto a las estructuras de datos personalizadas, los desarrolladores pueden crear tablas de datos personalizadas al activar el complemento.

¿Dónde puedo encontrar todos los hooks de acciones y filtros disponibles?

La documentación oficial de desarrollo de WordPress es el mejor lugar para encontrar los hooks. Además, los desarrolladores también pueden buscar los hooks directamente en el código fuente del núcleo de WordPress.

Abra el directorio raíz de WordPress en el editor de código y realice una búsqueda. do_action o apply_filters Al realizar una llamada a una función, es posible encontrar todos los ganchos (hooks) definidos y sus parámetros. Muchos recursos en línea también ofrecen listas de los ganchos más comúnmente utilizados.

¿Cómo depuro el código de mi plugin para WordPress?

Primero, asegúrate de que en tu… wp-config.php El modo de depuración está activado en el archivo: define( 'WP_DEBUG', true );Esto permitirá mostrar los errores y advertencias de PHP. Para evitar que los visitantes vean los mensajes de error, se puede configurar algo adicional al mismo tiempo. define( 'WP_DEBUG_DISPLAY', false ); Y registrar los errores en un archivo de registro:define( 'WP_DEBUG_LOG', true );

En segundo lugar, utilice error_log() La función registra información de depuración personalizada en un archivo de registro. En el caso de estructuras de datos complejas (como arrays u objetos), es posible utilizar métodos combinados para gestionar adecuadamente el almacenamiento y la visualización de dicha información. print_r() o var_dump() La información debe ser exhibida únicamente después de que un administrador inicie sesión, a fin de evitar la divulgación de datos. El uso de herramientas profesionales de depuración PHP, como Xdebug, permite realizar un depuración más eficiente mediante puntos de interrupción y seguimiento de pila (stack tracking).