Dominar el desarrollo de plugins para WordPress desde cero: principios, práctica y técnicas avanzadas

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

Los plugins de WordPress son el mecanismo clave para expandir sus funciones básicas. Gracias a ellos, es posible agregar infinitas funcionalidades a un sitio web sin necesidad de modificar el código central de WordPress. El desarrollo de plugins sigue una serie de convenciones y buenas prácticas para garantizar su seguridad, rendimiento y mantenibilidad. Un plugin estándar debe contener, al menos, un archivo principal, cuyo nombre suele coincidir con el nombre del propio plugin. my-awesome-plugin.phpEste artículo comenzará con conceptos básicos y te guiará paso a paso hacia el mundo del desarrollo de plugins.

Comprender los principios básicos de los plugins.

Un plugin para WordPress es, en esencia, uno o más archivos PHP que se almacenan en el directorio correspondiente de WordPress. /wp-content/plugins/ El complemento interactúa con el núcleo de WordPress a través de la API y del sistema de ganchos (Hooks) proporcionados por este.

Mecanismo de funcionamiento del sistema de ganchos

El sistema de ganchos (hooks) es esencial para el desarrollo de plugins en WordPress. Los desarrolladores pueden integrarse en el flujo de trabajo predeterminado de WordPress de dos principales maneras: a través de Acciones (Actions) y Filtros (Filters). Las Acciones te permiten ejecutar código personalizado en momentos específicos, mientras que los Filtros te permiten modificar los datos que se transmiten durante el proceso.

Lecturas recomendadas WordPress plugin de desarrollo de principiante a maestro: la mano para enseñar a construir sus propias características exclusivas

Por ejemplo, usar add_action() Una función puede registrar un “gancho de acción” (action hook). Cuando WordPress llega a ese punto específico del proceso, se ejecuta la función de callback que has asociado.

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

Información del encabezado de archivo estándar del plugin

El archivo PHP principal de cada plugin debe contener un bloque de comentarios de cabecera estandarizado, que sirve para proporcionar a WordPress la información metadatos del plugin. Estos datos controlan la forma en que el plugin se muestra en la página de administración de plugins del backend.

<?php
/**
 * Plugin Name: 我的超级插件
 * Plugin URI: https://www.example.com/my-super-plugin/
 * Description: 这是一个用来演示插件开发基础的示例插件。
 * Version: 1.0.0
 * Author: 张三
 * Author URI: https://www.example.com/
 * License: GPL v2 or later
 * Text Domain: my-super-plugin
 */

Carga y activación de plugins

Cuando un usuario activa un plugin a través de la interfaz administrativa de WordPress, este ejecuta el código contenido en su archivo principal en cada carga de página, siempre y cuando dicho código no se encuentre dentro de una función ni esté protegido por condiciones específicas. Por lo tanto, se recomienda encerrar todo el código funcional dentro de funciones o clases, y llamarlo a través de “ganchos” (hooks) para evitar que se ejecute cuando el plugin no esté activado.

Crea tu primer plugin

Vamos a crear un plugin sencillo cuya función es agregar automáticamente una declaración de derechos de autor al final de todo el contenido de los artículos en el sitio web.

Crear el archivo del plugin principal

En primer lugar, en /wp-content/plugins/ Cree una nueva carpeta en el directorio y llámela my-first-pluginLuego, cree el archivo principal dentro de esa carpeta. my-first-plugin.phpY añada la información del encabezado del archivo estándar mencionada anteriormente.

Lecturas recomendadas Desarrollo de plugins para WordPress: Desde los principios hasta la maestría: Una guía completa para crear módulos con funciones altamente personalizables

Modificar el contenido de un artículo utilizando filtros.

Vamos a utilizar… the_content Se utilizan filtros para modificar la salida de los artículos. Agrega el siguiente código a tu archivo principal:

function myfp_add_copyright_to_content($content) {
    // 确保只在文章主循环中、且非管理后台执行
    if (is_single() &amp;&amp; !is_admin()) {
        $copyright_text = '<p><em>Los derechos de autor de este artículo pertenecen a este sitio web. Por favor, indique la fuente al reproducirlo.</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
add_filter('the_content', 'myfp_add_copyright_to_content');

myfp_add_copyright_to_content La función recibe un parámetro. $contentEs decir, el contenido del artículo. Utilizamos funciones de evaluación de condiciones para procesarlo. is_single()Asegúrate de agregarlo únicamente en la página del artículo correspondiente. !is_admin() Esto evitará que el texto de derechos de autor se muestre en el editor de fondo.

Procesamiento de localización de plugins

Para que el plugin sea compatible con múltiples idiomas, es necesario realizar el proceso de internacionalización (i18n). Para comenzar, esto ya ha sido configurado en el encabezado del archivo principal. Text Domain: my-first-pluginLuego, se cargan los archivos de idioma durante la inicialización del plugin.

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

Normalmente, utilizamos… plugins_loaded Realiza las acciones necesarias para cargar la traducción de manera segura. Al mismo tiempo, utiliza… __() o _e() Utiliza funciones como estas para encapsular todas las cadenas de texto que necesitan ser traducidas.

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

Modo de desarrollo de plugins avanzados

Cuando las funciones de los plugins se vuelven más complejas, adoptar un enfoque de desarrollo orientado a objetos (OOP) y modelos más estructurados proporciona una mejor organización, encapsulación y mantenibilidad.

Utilizar la programación orientada a objetos.

Utilizar clases para encapsular todas las funciones de un plugin es una elección sensata. Esto puede evitar conflictos de nombres de funciones y proporcionar una estructura de código clara.

Lecturas recomendadas Análisis en profundidad: Dominar el núcleo y la práctica del desarrollo de plugins de WordPress desde cero.

class My_Advanced_Plugin {
    public function __construct() {
        // 在构造函数中绑定所有钩子
        add_action('wp_footer', array($this, 'add_footer_notice'));
        add_filter('the_title', array($this, 'modify_post_title'));
    }

public function add_footer_notice() {
        echo '<p style="text-align:center;">El soporte técnico es proporcionado por My Advanced Plugin.</p>';
    }

public function modify_post_title($title) {
        if (in_the_loop()) {
            return '📝 ' . $title;
        }
        return $title;
    }
}
// 实例化插件类
new My_Advanced_Plugin();

Añadir página de configuración para el panel de administración

Muchos plugins requieren ofrecer opciones de configuración a los usuarios. Agregar páginas de configuración en el backend de WordPress generalmente implica el uso de… add_menu_page() o add_submenu_page() Función que, en conjunto con la API Settings, permite guardar las opciones de manera segura.

class My_Plugin_Settings {
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_init', array($this, 'register_settings'));
    }

public function add_admin_menu() {
        add_options_page(
            '我的插件设置', // 页面标题
            '我的插件',     // 菜单标题
            'manage_options', // 权限
            'my-plugin-settings', // 菜单别名
            array($this, 'render_settings_page') // 回调函数
        );
    }

public function render_settings_page() {
        ?&gt;
        <div class="wrap">
            <h1>Configuraciones de mi plugin</h1>
            <form method="post" action="/es/options.php/" data-trp-original-action="options.php">
                <?php
                settings_fields('my_plugin_options_group');
                do_settings_sections('my-plugin-settings');
                submit_button();
                ?>
            <input type="hidden" name="trp-form-language" value="es"/></form>
        </div>
        &lt;?php
    }

public function register_settings() {
        register_setting(&#039;my_plugin_options_group&#039;, &#039;my_plugin_option_name&#039;);
        // ... 添加设置字段和章节
    }
}

Crear tablas de bases de datos personalizadas

Para algunos plugins que necesitan almacenar datos complejos, puede ser necesario crear tablas de datos personalizadas. Este proceso debe completarse cuando el plugin se active.

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.

WordPress proporciona una clase conveniente para la operación de bases de datos. wpdbEl código para crear una tabla generalmente se coloca en un archivo separado y se incluye mediante una referencia en el código principal. register_activation_hook En la función registrada.

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

$sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id mediumint(9) NOT NULL,
        data text 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__, 'my_plugin_create_database_table');

Seguridad y distribución de plugins

Antes de lanzar un plugin, es esencial asegurarse de su seguridad y comprender el proceso básico de su distribución.

Implementar las mejores prácticas de seguridad.

Todos los datos recibidos de los usuarios, ya sea que provengan de… $_GET$_POST Tanto los datos como las bases de datos deben ser verificados, limpiados y escapados (es decir, los caracteres especiales deben ser convertidos en su forma adecuada para evitar problemas de interpretación). Siempre utilice las funciones proporcionadas por WordPress para realizar estas tareas. esc_html()wp_strip_all_tags()intval() demasiado prepare() Métodos para manejar consultas SQL a fin de prevenir ataques de XSS (Injerto de Script en HTML) y SQL Injection.

Para realizar comprobaciones de capacidad relacionadas con la ejecución de operaciones administrativas o críticas, es esencial utilizar funciones de verificación de capacidades. Por ejemplo… current_user_can('manage_options') o check_ajax_referer()

Preparando el complemento para enviarlo al directorio oficial.

Si deseas distribuir el plugin de forma gratuita a usuarios de todo el mundo, puedes enviarlo al catálogo de plugins de WordPress.org. Para ello, debes seguir estrictamente ciertos estándares, como utilizar SVN para el control de versiones, asegurarte de la calidad del código y proporcionar archivos de traducción, entre otros. Un buen ejemplo de plugin que ha sido aceptado en el catálogo de WordPress.org es… (se podría mencionar un ejemplo concreto de plugin). readme.txt El archivo es necesario y sigue un formato específico para mostrar información en la página de detalles del plugin.

resúmenes

El desarrollo de plugins para WordPress comienza con la comprensión del sistema de ganchos (hooks) del núcleo del software, y luego se avanza paso a paso para aprender a crear funciones, administrar la interfaz de administración, manejar datos, y finalmente prestar atención a la seguridad y la distribución de los plugins. Los principiantes deben comenzar creando un plugin que contenga filtros simples, y luego probar la programación orientada a objetos, agregar páginas de configuración y trabajar con tablas de bases de datos personalizadas. Recordar que la seguridad es la principal prioridad en el desarrollo; utilizar de manera experta las numerosas funciones de seguridad ofrecidas por WordPress es clave para crear plugins fiables. Seguir los estándares y buenas prácticas de desarrollo hará que tus plugins no solo sean fáciles de mantener, sino que también sentarán las bases para su publicación futura en el catálogo oficial de WordPress o en mercados de plugins.

FAQ Preguntas más frecuentes

¿Cuántos archivos necesita tener, como mínimo, un plugin?

Un plugin necesita, como mínimo, un archivo PHP. Basta que dicho archivo contenga la información de cabecera correcta para un plugin y que esté almacenado en el lugar adecuado. /wp-content/plugins/ En el directorio principal o en sus subdirectorios, WordPress podrá reconocerlo y cargarlo.

Por supuesto, a medida que las funciones se vuelven más complejas, dividir el código en varios archivos (como JavaScript, CSS, archivos de clases PHP separados, etc.) es una mejor forma de organizarlo.

¿Cuál es la diferencia entre los ganchos (hooks) y los filtros (filters) de los plugins de WordPress?

Aunque los “ganchos de acción” (Action Hooks) y los “ganchos de filtro” (Filter Hooks) a veces se denominan colectivamente “ganchos” (Hooks), sus funciones son diferentes.

Los ganchos de acción (action hooks) te permiten “insertar” un código personalizado en puntos específicos del ciclo de vida de WordPress. No esperan un valor de retorno; simplemente realizan una acción, como enviar un correo electrónico o registrar un evento en el log. La función central para trabajar con estos ganchos es… add_action() Y do_action()

Los ganchos de filtro (filter hooks) te permiten “modificar” el valor de una variable (generalmente una cadena de texto o un array). Esperan que tu función de callback devuelva un valor modificado. La función central es… add_filter() Y apply_filters()

En términos sencillos: una “acción” es el acto de realizar algo, mientras que un “filtro” sirve para modificar datos.

¿Cómo evitar que los nombres de las funciones de los plugins se conflictúen con el tema o con otros plugins?

El mejor método es utilizar la programación orientada a objetos y encapsular todas tus funciones en una clase. De esta manera, solo los nombres de la clase y los métodos necesitan ser únicos.

Si se utiliza programación procedural, se debe agregar un prefijo único y de alta reconocibilidad a todos los nombres de funciones, constantes y variables globales. Por lo general, se utilizan nombres de plugins o abreviaturas como prefijo. Por ejemplo, si tu plugin se llama “Super Tool”, los nombres de las funciones podrían ser algo como… stool_get_data()stool_OPTION_KEY Así está bien.

Otra forma más efectiva es utilizar los espacios de nombres (namespaces) de PHP, ya que permiten aislar tu código de manera óptima.

¿Cómo se manejan los ajustes y opciones de los usuarios en el desarrollo de plugins?

WordPress recomienda encarecidamente el uso de su API de Configuraciones (Settings API) para gestionar las opciones de los plugins. Este API se encarga de almacenar de manera segura dichas opciones. wp_options El uso de validación no basada en certificados SSL (no CE), la renderización de campos y el envío de formularios es un método seguro y estandarizado.

Los pasos principales incluyen: utilizar register_setting() Registre un grupo de opciones y utilícelo. add_settings_section() Y add_settings_field() Añade áreas de configuración y campos, y finalmente utilízalos en la parte frontal ( frontend) del sitio web. settings_fields() Y do_settings_sections() Con esto se puede generar el formulario de configuración completo. Al guardar las opciones, utilice… update_option() Función.