Aprender a desarrollar plugins de WordPress desde cero: crear tu primera función personalizada.

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

Dominar el desarrollo de plugins para WordPress es una habilidad esencial para expandir las funcionalidades de un sitio web y satisfacer necesidades personalizadas. Esto es mucho más importante que simplemente modificar los temas (los diseños visuales del sitio). functions.php En comparación con los archivos tradicionales, el uso de plugins permite que las funciones sean independientes del tema elegido, lo que facilita su migración, gestión y mantenimiento. Este artículo te guiará paso a paso para crear un plugin con una estructura completa y que cumpla con los estándares de codificación de WordPress, desde cero.

Preparación y configuración del entorno.

Antes de escribir la primera línea de código, necesitas un entorno de desarrollo adecuado y un conocimiento básico de la arquitectura de WordPress.

Configuración del entorno de desarrollo

Un entorno de desarrollo local estándar es la piedra angular para un desarrollo eficiente. Se recomienda utilizar herramientas como XAMPP, MAMP o Local by Flywheel, que permiten instalar de forma sencilla Apache, MySQL/Nginx, PHP y WordPress con un solo clic. Además, asegúrate de que tu editor de texto o IDE (como VS Code o PhpStorm) soporte la resaltación del lenguaje PHP y sugerencias de código; esto mejorará significativamente la eficiencia del desarrollo.

Lecturas recomendadas Análisis en profundidad del desarrollo de plugins de WordPress: desde cero hasta una personalización eficiente

Comprender la arquitectura de los plugins de WordPress

Un plugin de WordPress es, en esencia, uno o más archivos PHP que se almacenan en una determinada ubicación dentro del sistema de WordPress. wp-content/plugins/ Se encuentra dentro del directorio. Su principio central es el mecanismo de “ganchos” (hooks). Los complementos (plugins) ejecutan código en momentos específicos a través de los “ganchos de acción” (action hooks), o modifican los datos devueltos por otras funciones mediante los “ganchos de filtro” (filter hooks). add_action Y add_filter Estas dos funciones son la clave para comenzar a desarrollar plugins.

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 plugin: una herramienta de saludo

Crearemos un plugin sencillo llamado “Saludos Diarios”. Este plugin mostrará una herramienta de bienvenida personalizada en el panel de control del backend del sitio web.

Crear el archivo principal del plugin

En primer lugar, en wp-content/plugins/ Cree una nueva carpeta en el directorio y llámela my-first-greeting-pluginDentro de esa carpeta, cree el archivo principal del plugin. my-first-greeting-plugin.php

Cada plugin debe comenzar con las notas de cabecera estándar, que son el identificador utilizado por WordPress para reconocer la información del plugin. Abra el archivo principal e ingrese el siguiente código:

<?php
/**
 * Plugin Name: 每日问候
 * Plugin URI:  https://www.yourwebsite.com/my-first-greeting-plugin
 * Description: 这是一个示例插件,用于在仪表盘显示个性化问候。
 * Version:     1.0.0
 * Author:      Your Name
 * Author URI:  https://www.yourwebsite.com
 * License:     GPL v2 or later
 * Text Domain: my-first-greeting
 */

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 el plugin “Daily Greetings” aparece en la lista y podrás activarlo. Por el momento, no tiene ninguna función activa.

Lecturas recomendadas Guía definitiva para el desarrollo de complementos de WordPress: construye tu primer complemento de cero a uno.

Añadir widgets al panel de control

A continuación, utilizaremos WordPress para… wp_dashboard_setup Utiliza los “ganchos de acción” (action hooks) para agregar una herramienta personalizada al panel de control. Debajo de las notas en la parte superior del archivo principal, continúa agregando el siguiente código:

// 添加仪表盘小工具
function mfgp_add_dashboard_widget() {
    wp_add_dashboard_widget(
        'mfgp_dashboard_widget',          // 小工具唯一ID
        '每日问候',                       // 小工具标题
        'mfgp_dashboard_widget_content'  // 显示内容的回调函数
    );
}
add_action( 'wp_dashboard_setup', 'mfgp_add_dashboard_widget' );

// 定义小工具内容
function mfgp_dashboard_widget_content() {
    $user = wp_get_current_user();
    $hour = date('G'); // 获取当前小时(24小时制)

if ( $hour &gt;= 5 &amp;&amp; $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 && $hour &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

echo &#039;<p>' . sprintf( esc_html__( '%s,%s!欢迎回来。', 'my-first-greeting' ), $greeting, esc_html( $user-&gt;display_name ) ) . '</p>';
    echo '<p>' . esc_html__( '这是你的第一个插件创建的问候小工具。', 'my-first-greeting' ) . '</p>';
}

Este código hace dos cosas: en primer lugar, define una función. mfgp_add_dashboard_widgetUtilice wp_add_dashboard_widget Se registró una pequeña herramienta mediante una función. Luego, se definió… mfgp_dashboard_widget_content Se trata de una función que genera el contenido de una pequeña herramienta (applet o widget). Esta herramienta muestra saludos diferentes según la hora del día y también muestra el nombre de usuario con el que se ha iniciado sesión. Cabe destacar que hemos utilizado… (Note that we used…) esc_html__() Y esc_html() Preparar la traducción de una función y generar los caracteres de escape correspondientes es una práctica importante para garantizar la seguridad y la internacionalización del software.

Después de activar el complemento y actualizar la página del panel de control, podrás ver la herramienta de “Saludos diarios”.

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

Mejoras en las funciones de los plugins y prácticas de seguridad

Un plugin básico ya está completo, pero para que sea más robusto y profesional, necesitamos prestar atención a la seguridad, la mantenibilidad y la configuración por parte de los usuarios.

Página de configuración de plugins

Sería más útil permitir que los usuarios personalicen sus saludos. Crearemos una página de configuración sencilla para el plugin.

En primer lugar, utilice admin_menu Se ha añadido una página de menú secundario al gancho de acción (action hook).

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

// 添加设置菜单
function mfgp_add_admin_menu() {
    add_options_page(
        '每日问候设置',                // 页面标题
        '每日问候',                    // 菜单标题
        'manage_options',             // 所需权限
        'my-first-greeting-plugin',   // 菜单slug
        'mfgp_settings_page_content' // 回调函数
    );
}
add_action( 'admin_menu', 'mfgp_add_admin_menu' );

Luego, se crea el contenido de la página de configuración, las opciones de registro y los procedimientos para guardar el formulario.

// 设置页面内容
function mfgp_settings_page_content() {
    ?&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( 'mfgp_settings_group' ); // 输出安全字段
            do_settings_sections( 'my-first-greeting-plugin' ); // 输出设置区块
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="es"/></form>
    </div>
    <?php
}

// 初始化设置
function mfgp_settings_init() {
    register_setting(
        'mfgp_settings_group', // 选项组名
        'mfgp_custom_message', // 选项名
        array( 'sanitize_callback' => 'sanitize_text_field' ) // 清理回调
    );

add_settings_section(
        'mfgp_section', // 区块ID
        '自定义问候设置', // 区块标题
        null, // 区块描述回调(无)
        'my-first-greeting-plugin' // 所属页面
    );

add_settings_field(
        'mfgp_field',
        '自定义问候语前缀',
        'mfgp_field_callback', // 输出字段HTML的回调
        'my-first-greeting-plugin',
        'mfgp_section'
    );
}
add_action( 'admin_init', 'mfgp_settings_init' );

// 设置字段的回调函数
function mfgp_field_callback() {
    $value = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );
    echo '<input type="text" name="mfgp_custom_message" value="' . esc_attr( $value ) . '" class="regular-text" />';
    echo '<p class="description">Este texto se añadirá antes de los saludos.</p>';
}

Finalmente, modifiquemos la función que contiene los componentes adicionales («gadgets») para que los ajustes personalizados realizados por el usuario tengan efecto.

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 mfgp_dashboard_widget_content() {
    $user = wp_get_current_user();
    $hour = date('G');
    $custom_msg = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );

if ( $hour &gt;= 5 &amp;&amp; $hour < 12 ) {
        $greeting = '早上好';
    } elseif ( $hour >= 12 && $hour &lt; 18 ) {
        $greeting = &#039;下午好&#039;;
    } else {
        $greeting = &#039;晚上好&#039;;
    }

echo &#039;<p>' . esc_html( $custom_msg ) . sprintf( esc_html__( '%s,%s!', 'my-first-greeting' ), $greeting, esc_html( $user-&gt;display_name ) ) . '</p>';
}

Ahora, en el menú “Ajustes” del panel de administración de WordPress, aparecerá la página de opciones “Saludos diarios”, donde los administradores pueden guardar un prefijo de saludo personalizado.

Seguir los estándares de seguridad y codificación.

Durante el proceso de desarrollo, es esencial seguir las prácticas de seguridad de WordPress: se deben utilizar las funciones de escape adecuadas para todos los datos provenientes de los usuarios o de la base de datos que vayan a ser exhibidos. esc_html, esc_attr, esc_urlSe realiza la validación y limpieza de toda la información introducida por los usuarios (por ejemplo, utilizando herramientas específicas para ello). sanitize_text_field) ; Uso wp_kses_post o wp_kses Permite el uso de HTML seguro. Además, se recomienda seguir las siguientes pautas: Estándar de codificación PHP oficial de WordPressPara garantizar que el código sea claro y coherente…

Internacionalización de plugins y preparación para su publicación

Para que tu plugin sea utilizado por usuarios de todo el mundo, la internacionalización es un paso esencial. Además, para prepararlo para su publicación en el directorio oficial, es necesario seguir ciertas normas.

Implementar la internacionalización del complemento

Ya hemos utilizado eso en el código. esc_html__() Para traducir el texto que se quiere empaquetar, es necesario crear un archivo de traducción en el directorio del plugin. Para lograr la internacionalización, se debe seguir estos pasos: languages Carpeta. Luego, añada el siguiente código después de las notas al principio del archivo principal para cargar el campo de texto:

// 加载文本域以实现国际化
function mfgp_load_textdomain() {
    load_plugin_textdomain( 'my-first-greeting', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mfgp_load_textdomain' );

Después, puedes utilizar herramientas como Poedit para analizar las cadenas de texto traducidas en el código del plugin y generar el contenido necesario. .pot Archivos de plantilla, y para diferentes idiomas (como el chino) zh_CNCrear .po Y después de la compilación. .mo Archivo, colócalo aquí. languages Carpeta.

Listo para ser publicado en el directorio oficial.

Si planeas enviar un plugin al directorio de plugins de WordPress.org, debes asegurarte de que la calidad del código sea alta y que incluyas los archivos de metadatos necesarios. Por ejemplo, crea un… readme.txt El archivo debe cumplir con un formato específico. Normas específicas de WordPressIncluir el nombre del plugin, su descripción, los pasos para instalarlo, las preguntas frecuentes, los registros de actualizaciones, etc. Además, considerar agregar un mecanismo de desinstalación que limpie las opciones almacenadas en la base de datos cuando el usuario elimine el plugin.

// 插件卸载时清理选项
function mfgp_uninstall_hook() {
    delete_option( 'mfgp_custom_message' );
}
register_uninstall_hook( __FILE__, 'mfgp_uninstall_hook' );

resúmenes

Al crear este plugin de “saludos diarios”, hemos seguido completamente el proceso central de desarrollo de plugins para WordPress: desde establecer la estructura básica de los archivos, hasta agregar funcionalidades utilizando ganchos de acción (action hooks), pasando por la creación de interfaces de administración, la implementación de normas de seguridad y la preparación para la internacionalización. Lo esencial es comprender y utilizar con habilidad el sistema de ganchos de WordPress, y siempre dar prioridad a la seguridad y a los estándares de código. Este ejemplo sencillo es el punto de partida en tu camino hacia el desarrollo de plugins; a partir de aquí, puedes explorar funcionalidades más complejas, como códigos más cortos, tipos de artículos personalizados y puntos de terminación de API REST, para desarrollar plugins profesionales y potentes.

FAQ Preguntas más frecuentes

¿En qué directorio deben colocarse los complementos (plugins)?

Los plugins de WordPress deben colocarse en la carpeta correspondiente del sitio web. wp-content/plugins/ Todos los plugins se encuentran dentro de un directorio. Cada plugin puede ser un archivo PHP independiente, pero lo más común es que se trate de una carpeta con el mismo nombre que el plugin, que contiene el archivo principal y otros recursos.

¿Por qué mi plugin no se muestra en la lista de plugins en segundo plano (en el backend)?

Por favor, verifique si el formato de las notas de cabecera del archivo del plugin principal (como el Nombre del Plugin y la Descripción) es correcto y completo. Asegúrese de que el archivo se encuentra en la carpeta correcta y de que WordPress tenga permisos para leerlo. Además, compruebe si hay espacios o caracteres adicionales al principio del código PHP.

¿Cómo depurar los errores de PHP en un plugin?

En wp-config.php En el documento, se indicará que... WP_DEBUG Los constantes se establecen en trueEsto permitirá que WordPress muestre errores de PHP, advertencias y notificaciones en las páginas. Tenga en cuenta que esta función solo debe activarse en entornos de desarrollo y debe desactivarse antes de publicar el sitio web.

¿Cuál es la diferencia entre los archivos functions.php de los plugins y los temas?

En el tema de… functions.php Las funciones adicionadas están vinculadas al tema específico. Al cambiar de tema, es posible que estas funciones dejen de funcionar. En cambio, las funciones ofrecidas por los plugins son independientes del tema; siempre están disponibles mientras el plugin esté activado, sin importar el tema que se utilice. Para funciones de carácter general (es decir, que sean útiles en varios temas), desarrollar plugins es la opción más recomendable.

¿Cómo puedo permitir que otros desarrolladores extiendan mi plugin?

Puedes permitir que otros desarrolladores extiendan tu plugin proporcionando “ganchos de acción” (action hooks) y “ganchos de filtro” (filter hooks) personalizados. do_action() Cree ganchos de acción (action hooks) para “realizar alguna acción” en los lugares donde sea necesario insertar código. apply_filters() Se crean “ganchos de filtro” (filter hooks) que permiten que otros plugins modifiquen ciertos valores de datos dentro del tuyo. Este es un patrón común de colaboración entre plugins en la comunidad de WordPress.