Guía completa para el desarrollo de plugins de WordPress: crea plugins PHP profesionales desde cero.

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

La estructura básica y los archivos de los complementos de WordPress.

Un plugin estándar de WordPress requiere, como mínimo, un archivo principal. Este archivo principal suele llevar el nombre del plugin, por ejemplo, my-first-plugin.phpAl comienzo del archivo, se debe incluir un encabezado de archivo específico para declarar la información básica del complemento al sistema de WordPress. Esta información incluye el nombre del complemento, la descripción, la versión, el autor, etc., y se mostrará en la página de administración de “Complementos” en el panel de control.

Además del archivo principal, un complemento funcional generalmente incluye otros directorios y archivos para organizar el código. La estructura de directorios común incluye aquellos utilizados para almacenar archivos CSS y JavaScript./assetsUn catálogo que contiene archivos de clases PHP./includesEl catálogo, así como los modelos de interfaz de usuario./templatesÍndice. Esta estructura modular ayuda a mantener el código y facilita la colaboración en equipo.

El archivo principal del complemento es el punto de entrada para toda la funcionalidad del complemento. Además de declarar la información del elemento, sus funciones principales incluyen registrar los ganchos de activación y desactivación, importar los archivos de dependencia necesarios e inicializar la funcionalidad central del complemento. Mediante una organización adecuada de los archivos, se puede garantizar que el complemento mantenga una estructura clara, incluso cuando su funcionalidad sea compleja.

Lecturas recomendadas Guía de introducción al desarrollo de plugins de WordPress.

Crea tu primer complemento básico.

Comencemos creando un complemento de “Hola, mundo” lo más simple posible, para familiarizarnos con el proceso de creación de complementos y su ciclo de vida básico.

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

Definir la información del complemento y la función principal.

En primer lugar, en el directorio de instalación de WordPress local, debes hacer lo siguiente:/wp-content/plugins/En la ruta, cree una nueva carpeta y llámela “hello-world”. Dentro de esta carpeta, cree un archivo llamadohello-world.phpLos documentos.

Al comienzo de este archivo, debes agregar la información del encabezado del complemento. Un encabezado de complemento típico se muestra a continuación:

<?php
/**
 * Plugin Name:       你好世界示例插件
 * Plugin URI:        https://yourwebsite.com/hello-world
 * Description:       这是一个用于演示的简单WordPress插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       hello-world
 * Domain Path:       /languages
 */

A continuación, agregaremos una función sencilla al complemento: agregar automáticamente un fragmento de texto al final del contenido del artículo. Podemos hacerlo mediantethe_contentEsto se puede lograr mediante un filtro. Agregue el siguiente código después de la información del encabezado del archivo principal:

La función hello_world_add_footer_text( $content ) se utiliza para agregar texto al pie de página en la página de un solo artículo. Si se encuentra en la página de un solo artículo (is_single() = true), el texto del pie de página se establecerá en '  函数 hello_world_add_footer_text( $content ) 的用途是在单篇文章页面添加文本。若当前页面为单篇文章页面(is_single() 返回 true),则会将页脚文本设置为 ' 。'<p><em>Este artículo fue generado por el complemento “Hola, mundo”.</em></p>'funciona como un filtro de WordPress que agrega texto al pie de página. El filtro se ejecuta automáticamente cada vez que se muestra el contenido de una página, y el texto agregado aparece en el pie de página.  

function hello_world_add_footer_text( $content ) {  
    if ( is_home() ) {  
        $content .= 'Bienvenido a mi página de inicio';  
    }  
    return $content;  
}
add_filter( 'the_content', 'hello_world_add_footer_text' );

Manipular la activación y desactivación de los complementos.

Los complementos profesionales deben manejar adecuadamente la lógica de su activación y desactivación. Por ejemplo, al activar el complemento, puede ser necesario crear tablas de base de datos o establecer opciones predeterminadas; al desactivarlo, puede ser necesario limpiar los datos temporales. Utilizamosregister_activation_hookYregister_deactivation_hookUsamos una función para registrar los ganchos correspondientes.

Lecturas recomendadas Desde el nivel principiante hasta el avanzado, desarrollo de complementos de WordPress: creación de funciones personalizadas y extensión eficiente

Agregue el siguiente código al archivo principal:

// 插件激活时执行的操作
function hello_world_activate() {
    // 例如:添加一个选项到数据库
    if ( ! get_option( 'hello_world_installed' ) ) {
        add_option( 'hello_world_installed', time() );
    }
    // 可以在这里刷新固定链接规则,以确保新注册的URL结构生效
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hello_world_activate' );

// 插件停用时执行的操作
function hello_world_deactivate() {
    // 例如:删除我们创建的临时选项(谨慎操作,用户数据通常不删除)
    // delete_option( 'hello_world_installed' );
    // 清理重写规则
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hello_world_deactivate' );

Después de completar los pasos anteriores, podrás ver y activar el “Plug-in de ejemplo de Hola mundo” en la página de “Plug-ins” del panel de control de WordPress. Una vez activado, al visitar cualquier artículo, verás el texto añadido al final del contenido.

Aprovechar las funcionalidades mejoradas de la API central de WordPress.

WordPress ofrece una API extremadamente completa que permite a los desarrolladores de plugins interactuar de manera segura y estándar con el sistema central. Dominar estas API es clave para el desarrollo profesional.

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

Utilizar ganchos de acción y filtros.

Los ganchos de acción (Action Hooks) te permiten “insertar” y ejecutar tu propio código en un momento determinado. Por ejemplo, cuando se publica un artículo, WordPress activa un ganchó de acción.save_postAcción. Puedes hacerlo a través deadd_action()El funcionamiento de la función consiste en montar su propia función en este gancho.

function hello_world_on_post_publish( $post_id, $post, $update ) {
    // 检查是否不是修订版本,并且是发布操作
    if ( wp_is_post_revision( $post_id ) || $post->post_status != 'publish' ) {
        return;
    }
    // 发送邮件通知或执行其他逻辑
    // wp_mail( '[email protected]', '新文章已发布', '文章标题:' . $post->post_title );
}
add_action( 'save_post', 'hello_world_on_post_publish', 10, 3 );

Los ganchos de filtro (Filter Hooks) te permiten modificar los datos. Los anterioresthe_contentUn ejemplo es una aplicación de filtro típica. Otro ejemplo común es modificar el título de un artículo:

function hello_world_modify_title( $title ) {
    return '【推荐】' . $title;
}
// add_filter( 'the_title', 'hello_world_modify_title' ); // 谨慎使用,这会修改所有标题

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

Muchos complementos requieren una interfaz de fondo para configurar la configuración. WordPress proporciona funciones para agregar fácilmente menús principales o submenús al panel de administración.

Lecturas recomendadas Aprenda a desarrollar complementos de WordPress: cree módulos de funciones personalizadas y eficientes desde cero.

El siguiente código muestra cómo agregar una página de opciones simple y usar la API de configuración de WordPress para guardar una opción de forma segura.

// Paso 1: Añadir una entrada de menú al panel de administración
function hello_world_add_admin_menu() {
    add_menu_page(
        'Hola mundo configuración',   // Título de la página
        'Plug-in de Hola mundo',   // Título del menú
        'manage_options',   // Permisos necesarios
        'hello-world-settings',   // Slug del menú
        'hello_world_settings_page',   // Función de devolución para renderizar la página
        'dashicons-admin-generic',   // Ícono (opcional)
        80   // Posición del menú
    );
}
add_action( ‘admin_menu‘, ‘hello_world_add_admin_menu’ );

// Paso 2: Definir el contenido HTML de la página de configuración
function hello_world_settings_page() {
    ?&gt;  // Step 1: Add a menu item to the admin panel
function hello_world_add_admin_menu() {
    add_menu_page(
        'Hello World Settings',   // Page title
        'Hello World Plugin',   // Menu title
        'manage_options',   // Required permissions
        'hello-world-settings',   // Menu slug
        'hello_world_settings_page',   // Callback function for rendering the page
        'dashicons-admin-generic',   // Icon (optional)
        80   // Menu position
    );
}
add_action( 'admin_menu', 'hello_world_add_admin_menu' );

// Step 2: Define the HTML content of the settings page
function hello_world_settings_page() {
    ?&gt;
    <div class="”wrap”">
        <h1>Hola, configuración del plugin de Hello World.</h1>
        <form method="”post”" action="/es/”options.php”/" data-trp-original-action="”options.php”">
            <?php
                settings_fields( ‘hello_world_settings_group’ ); // 输出设置字段和非ce字段
                do_settings_sections( ‘hello-world-settings’ ); // 输出设置部分
                submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    <p>El plugin Hello World te permite personalizar el mensaje que se muestra en la página de inicio del sitio web. Para ello, primero debes activar el plugin en el área de administración de WordPress y, a continuación, configurar el mensaje que deseas mostrar.</p>
</div>
&lt;?php
}

// 字段描述的回调函数
function hello_world_message_field_render() {
    echo “ <p>Este es el mensaje que se mostrará en la página de inicio del sitio web.</p>
”;
}

?&gt;

```

 步骤1:初始化设置、字段和章节
function hello_world_settings_init() {
    // 注册一个新的设置项到‘hello_world_settings_group’组
    register_setting( ‘hello_world_settings_group’, ‘hello_world_custom_message’ );

// 在页面中新增一个章节
    add_settings_section(
        ‘hello_world_settings_section’,
        ‘自定义消息设置’,
        ‘hello_world_settings_section_callback‘,
        ‘hello-world-settings’
    );

// 向章节中添加一个字段
    add_settings_field(
        ‘hello_world_message_field’,
        ‘前台显示的消息’,
        ‘hello_world_message_field_render’,
        ‘hello-world-settings’,
        ‘hello_world_settings_section’
    );
}
add_action( ‘admin_init’, ‘hello_world_settings_init’ );

// 章节描述的回调函数
function hello_world_settings_section_callback() {
    echo ‘  <p>El plugin Hello World te permite personalizar el mensaje que se muestra en la página de inicio del sitio web. Para ello, primero debes activar el plugin en el área de administración de WordPress y, a continuación, configurar el mensaje que deseas mostrar.</p>
</div>
&lt;?php
}

// 字段描述的回调函数
function hello_world_message_field_render() {
    echo ‘ <p>Este es el mensaje que se mostrará en la página de inicio del sitio web.</p>
';
}

?&gt;

```‘<p>Aquí se configura el contenido del mensaje que se mostrará en primer plano por el complemento.</p>’<p>Hola, mundo!</p> ‘;
}

```

 注:翻译过程中对部分语法进行了调整,例如将 PHP 中的 `echo` 替换为 JavaScript 中的 `console.log`,以符合 JavaScript 的输出格式。此外,保持了代码的结构和逻辑,使其在翻译后仍然易于理解。’<input type="”text”" name="”hello_world_custom_message”" value="”‘" . esc_attr( $option ) ‘“ size ="”40”" />’;
}

Con el código anterior, has creado una página de configuración que cumple con los estándares de WordPress y que permite guardar los datos de forma segura en segundo plano.

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.

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

Antes de compartir el complemento con otras personas o enviarlo al catálogo oficial, es fundamental asegurarse de que sea seguro, eficiente y fácil de usar.

Seguir las mejores prácticas de seguridad.

La seguridad es la primera prioridad en el desarrollo de complementos. El principio fundamental es: nunca confiar en la entrada del usuario. Todos los datos provenientes del usuario o de fuentes externas (como, por ejemplo,$_GET$_POST$_COOKIEAntes de usarlo en consultas de bases de datos, para mostrarlo en una página o ejecutar comandos del sistema, es necesario validarlo, limpiarlo o escaparlo.

Para el contenido que se va a exportar a HTML, utilice For the content that will be exported to HTML, use <esc_html()esc_attr()owp_kses_post()Es necesario escapar de las funciones, como las de JavaScript, para que puedan ser utilizadas en otros lenguajes de programación.

Echo ‘<div class="”“‘" . esc_attr( $user_provided_class ) ‘“>’¡No!‘. esc_html( $user_provided_content ) . '</div>’;

Para las consultas de base de datos, nunca debe concatenar variables directamente en las sentencias SQL. Debe usar$wpdb->prepare()Llevar a cabo el preprocesamiento mediante el método.

global $wpdb;
$user_id = 123;
$query = $wpdb->prepare(
    “SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d”,
    $user_id
);
$results = $wpdb->get_results( $query );

Además, todas las funciones de devolución de llamada a las que pueden acceder los usuarios (ya sea para AJAX front-end o para operaciones de back-end) deben usar .current_user_can()ocheck_ajax_referer()Espera a que las funciones realicen las comprobaciones de permisos y seguridad.

Optimizar el rendimiento del complemento

Los complementos de bajo rendimiento pueden afectar la experiencia del usuario en todo el sitio web. La optimización puede abordarse desde varios aspectos: el uso adecuado de la caché, evitar consultas complejas de bases de datos o llamadas a API remotas en cada carga de página. WordPress ofrece una API transitoria.(Transients API)Esto permite almacenar datos temporales de manera conveniente.

// 尝试从缓存获取数据
$data = get_transient( ‘my_plugin_expensive_data’ );
if ( false === $data ) {
    // 缓存中没有,执行昂贵操作
    $data = expensive_database_query();
    // 将结果缓存12小时
    set_transient( ‘my_plugin_expensive_data’, $data, 12 * HOUR_IN_SECONDS );
}

En segundo lugar, asegúrate de que los archivos CSS y JavaScript solo se carguen en las páginas que lo necesiten. Mediantewp_enqueue_script()Ywp_enqueue_style()Los funciones pueden controlar con precisión la carga y las dependencias de los recursos. Para los recursos en segundo plano, se pueden montar estos.admin_enqueue_scriptsGancho; para los recursos de la interfaz gráfica, se monta enwp_enqueue_scriptsGancho.

Prepararse para la internacionalización y el lanzamiento.

Para que el complemento pueda ser utilizado por usuarios de todo el mundo, es indispensable la internacionalización (i18n). Esto significa que debe envolver todos los cadenas orientadas al usuario con una función específica.

Cambie las cadenas en el plugin de:

echo “Hello World!”;

Cambia esto por:

echo __( ‘Hello World!’, ‘hello-world’ );

Entre ellos,‘hello-world’Es lo que definiste en la cabecera del plugin.Text DomainLuego, puedes usar herramientas como Poedit para generar.potLos archivos de plantilla, a partir de los cuales los traductores pueden crear versiones en diferentes idiomas..poY.moDocumentos. Coloque estos archivos de traducción en la cabecera del complemento.Domain PathEl directorio especificado (por ejemplo…)/languagesBasta con hacer clic en el enlace a continuación.

Antes de la publicación, asegúrate de redactar una descripción detallada.readme.txtEl documento, cuyo formato debe cumplir con los requisitos oficiales de WordPress, incluye la descripción del complemento, los pasos de instalación, las preguntas frecuentes, etc. Este es un requisito obligatorio para enviarlo al directorio de complementos de WordPress. Además, agregar comentarios detallados de PHP Doc al código del complemento no solo ayuda a otros a comprender tu código, sino que también es una muestra de profesionalidad.

resúmenes

Este artículo presenta de manera sistemática el proceso completo para desarrollar un plugin profesional de WordPress desde cero. Comenzamos por comprender la estructura básica de los plugins y creamos nuestro primer plugin simple con lógica de activación/desactivación. Luego, profundizamos en el potente sistema de acciones y filtros de WordPress y en cómo utilizarlo para integrarse profundamente con el núcleo y crear una página de configuración estándar. Por último, enfatizamos las normas de seguridad indispensables para el desarrollo de plugins, las técnicas de optimización del rendimiento y los preparativos de internacionalización para una publicación global. Al dominar estos conocimientos y habilidades básicos, podrás crear plugins profesionales de WordPress seguros, eficientes y fáciles de mantener, pasando de satisfacer necesidades personales a atender a un público más amplio.

FAQ Preguntas más frecuentes

¿Qué conocimientos básicos se necesitan para desarrollar un plugin de WordPress?

Para desarrollar un complemento de WordPress, primero se necesitan sólidos conocimientos de programación en PHP, ya que el código del complemento está compuesto principalmente por PHP. Al mismo tiempo, es necesario tener un conocimiento básico de HTML, CSS y JavaScript para poder manejar la presentación y la interacción en el frontend. Lo más importante es que se deben dominar los conceptos básicos de WordPress, como los ganchos (Hooks), los códigos cortos (Shortcodes), los tipos de publicaciones personalizados (CPT) y las operaciones de base de datos.$wpdbEl uso de .

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

Un método de depuración efectivo es activar el modo depuración de WordPress.WP_DEBUGEn tu patrón.wp-config.phpEn el documento, se indicará que...define( ‘WP_DEBUG’, false );cambiar adefine( ‘WP_DEBUG’, true );También puedes habilitarlo al mismo tiempo.WP_DEBUG_LOGRegistre los errores en un archivo de registro o habilite la función de registro de errores.WP_DEBUG_DISPLAYSe muestra un error en la página (solo en entornos de desarrollo). Además, el uso de las herramientas para desarrolladores del navegador (pestañas de Consola y Red) es fundamental para depurar el JavaScript del front-end y las solicitudes AJAX.

¿Cómo puede mi complemento ser compatible con otros complementos?

El secreto para garantizar una buena compatibilidad radica en seguir los estándares de codificación de WordPress y usar con precaución las variables globales y los nombres de las funciones. Añadir un prefijo único a las funciones, clases y constantes de tu plugin es la mejor práctica para evitar conflictos de nombres, por ejemplo, usar The key to ensuring good compatibility lies in following the WordPress coding standards and using global variables and function names with caution. Adding a unique prefix to your plugin's functions, classes, and constants is the best practice to avoid naming conflicts, for example, using <myplugin_O bien, utilice abreviaturas de desarrollador como prefijo. Cuando modifique contenido que pueda estar relacionado con otros complementos (por ejemplo, el contenido de un artículo o un título), asegúrese de que la función de devolución de llamada de su filtro tenga la prioridad adecuada.add_filterPara lograr esto, necesitamos pasar el tercer parámetro (el de la matriz) y prestar atención al formato del valor devuelto. Además, debemos usarlo de manera razonable.class_exists()ofunction_exists()Para comprobar si una clase o función ha sido definida, se puede implementar una carga condicional o proporcionar una solución alternativa.

¿Es necesario dominar la programación orientada a objetos (POO) para desarrollar complementos?

Aunque es posible desarrollar complementos completamente funcionales utilizando el enfoque tradicional de programación orientada a procesos, se recomienda encarecidamente aprender y utilizar la programación orientada a objetos (POO). La POO permite organizar mejor el código, encapsular las funciones mediante clases y mejorar la reutilización y el mantenimiento del código. Para los proyectos de complementos medianos y grandes, el uso de la POO combinada con espacios de nombres y carga automática es una práctica estándar en la industria, ya que permite distinguir claramente entre los diferentes módulos y reduce significativamente el acoplamiento del código.