Guida completa allo sviluppo di plugin per WordPress: crea il tuo primo plugin da zero.

Leggere in 3 minuti.
2026-03-19
2026-06-03
2,743
Guadagno delle commissioni quando fai acquisti tramite i link qui sotto, senza alcun costo aggiuntivo per te.

Preparativi e allestimento dell'ambiente.

Prima di iniziare a scrivere il codice, è necessario disporre di un ambiente di sviluppo appropriato. Questo include un’installazione locale di WordPress, un editor di codice e una conoscenza di base di PHP. Per l’ambiente di sviluppo locale si consigliano strumenti come XAMPP, MAMP o Local by Flywheel, che permettono di configurare rapidamente un ambiente server su computer che includa PHP e MySQL.

Creare il directory di base e i file per il plugin

Ogni plugin per WordPress deve disporre di un file principale, che rappresenta il punto di ingresso per l’esecuzione del plugin stesso. Per iniziare, è necessario creare questo file all’interno della struttura del plugin. wp-content/plugins Crea una nuova cartella all’interno del directory, ad esempio… my-first-pluginPoi, all’interno di quella cartella, crea un file PHP principale; di solito il nome di questo file corrisponde al nome della stessa cartella. my-first-plugin.php

All’inizio di questo file principale deve essere presente un commento contenente le informazioni standard relative al plugin. WordPress utilizza queste informazioni per riconoscere e visualizzare il tuo plugin nell’interfaccia di gestione in background.

Si consiglia di leggere Dallo zero all’uno: Impara passo dopo passo le tecniche fondamentali dello sviluppo di plugin per WordPress

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习 WordPress 插件开发的示例插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Comprendere la struttura di base dello sviluppo di plugin per WordPress

Un plugin completo di funzionalità di solito non è composto da un solo file. Oltre al file principale, potrebbero esserci anche file contenenti codice JavaScript, CSS, immagini e altri risorse, nonché file di lingua per l’internazionalizzazione. Una struttura di directory ben organizzata aiuta a mantenere il codice in ordine e facilita la sua gestione.

UltaHost – Hosting per siti WordPress
Garanzia di rimborso entro 30 giorni, larghezza di banda illimitata e accesso ai database, protezione gratuita contro gli attacchi DDoS; sconto del 50% per l’acquisto di un piano valido per 3 anni (da 3 a 4 TB di spazio di archiviazione).

Una struttura consigliata è la seguente:
- my-first-plugin/ (Directorio principale del plug-in)
- my-first-plugin.php (File principale)
- includes/ (Archiviazione di file di classe o funzioni di funzionalità principali)
- admin/ (Archiviazione del codice relativo all'interfaccia di gestione di back-end)
- public/ (Dove è conservato il codice relativo alla visualizzazione front-end)
- assets/ (Dove vengono archiviati risorse come CSS, JavaScript, immagini, ecc.)
- languages/ (Dove vengono archiviati i file di traduzione internazionali)

Scrittura di codice PHP di base

Tutta la logica funzionale dei plugin è implementata tramite codice PHP. WordPress offre un’ampia gamma di…动作钩子过滤器钩子Questo rappresenta la base fondamentale per l’interazione tra i plugin e il nucleo di WordPress.

Implementare una funzionalità di codice breve e semplice.

I codici brevi (short codes) sono strumenti molto utili che permettono agli utenti di integrare facilmente funzionalità di plugin all’interno di articoli o pagine web. Realizzeremo un codice breve semplice che visualizza un saluto sullo schermo.

Nel tuo file principale… my-first-plugin.php Sotto i commenti in testa, aggiungi le seguenti funzioni e hook:

Si consiglia di leggere Analisi approfondita dello sviluppo dei plugin di WordPress: costruire la tua prima estensione funzionale da zero.

// 注册短代码
function mfp_greeting_shortcode( $atts ) {
    // 使用 shortcode_atts 设置默认参数并合并用户传入的参数
    $atts = shortcode_atts( array(
        'name' =&gt; '访客',
    ), $atts, 'mfp_greeting' );

// 返回要显示的内容
    return '<p>Ciao, '%s'!. Benvenuti nell’utilizzo del mio primo plugin.</p>'php
add_shortcode('mfp_greeting', 'mfp_greeting_shortcode');

Ora, gli utenti possono inserire contenuti nell’editor di articoli. [mfp_greeting name=“小明”]Nel frontend verrà visualizzato il messaggio: “Ciao, Xiaoming! Benvenuto nell’utilizzo del mio primo plugin.”

Aggiungere un’opzione di configurazione al backend.

Per rendere le funzionalità di un plugin configurabili, di solito è necessario aggiungere una pagina di impostazioni. Qui viene mostrato come aggiungere una pagina di menu secondario al menu “Impostazioni”.

Innanzitutto, utilizziamo… add_action I “ganci” (hook) vengono registrati e configurati durante l’inizializzazione dell’amministratore.

hosting.com Hosting condiviso
Prestazioni elevate con CPU AMD EPYC, storage SSD NVMe e LiteSpeed, supporto interno di esperti 24 ore su 24, 7 giorni su 7, misure di sicurezza avanzate, tra cui SSL, brute force, malware e protezione DDoS, risparmi fino a 73%
// 初始化插件设置
function mfp_settings_init() {
    // 注册一个新的设置 section
    add_settings_section(
        'mfp_settings_section', // section ID
        '我的插件设置', // 标题
        'mfp_settings_section_callback', // 回调函数,用于输出 section 描述
        'general' // 显示在哪个设置页,这里是“常规”设置页
    );

// 在 section 内注册一个字段
    add_settings_field(
        'mfp_default_greeting', // 字段 ID
        '默认问候人名', // 字段标题
        'mfp_default_greeting_callback', // 渲染字段输入框的回调函数
        'general', // 设置页面
        'mfp_settings_section' // 所属 section
    );

// 在 WordPress 的 `option` 表中注册这个设置
    register_setting( 'general', 'mfp_default_greeting' );
}
add_action( 'admin_init', 'mfp_settings_init' );

Successivamente, definisci le due funzioni di callback utilizzate per rendere l’interfaccia grafica.

// Section 描述的回调函数
function mfp_settings_section_callback() {
    echo '<p>Qui configuro le opzioni relative al mio primo plugin.</p>';
}

// 字段输入框的回调函数
function mfp_default_greeting_callback() {
    // 从数据库获取已保存的值,如果没有则使用默认值
    $option = get_option( 'mfp_default_greeting', 'WordPress 用户' );
    // 输出一个输入框
    echo '<input type="text" name="mfp_default_greeting" value="' . esc_attr( $option ) . '" />';
}

Ora puoi trovare questa opzione di configurazione in fondo alla pagina “Impostazioni -> Generali” nell’interfaccia di amministrazione di WordPress.

Gestione dei risorse front-end e interazioni con Ajax

I plugin moderni di solito richiedono stili grafici e logiche di interazione propri. WordPress offre metodi standard per registrare e caricare in modo sicuro i file CSS e JavaScript.

Si consiglia di leggere Partendo da zero: perché scegliere lo sviluppo di plugin per WordPress?

Caricare in modo sicuro i file CSS e JavaScript

永远不要直接在你的 PHP 文件中通过 <link><script> I percorsi dei risorse vengono codificati in modo statico (hard-coded) nelle etichette. È meglio utilizzare un approccio diverso. wp_enqueue_stylewp_enqueue_script Funzione.

// 注册并加载前端资源
function mfp_enqueue_public_assets() {
    // 加载一个 CSS 文件
    wp_enqueue_style(
        'mfp-public-style', // 样式表句柄
        plugin_dir_url( __FILE__ ) . 'assets/css/public-style.css', // 样式表 URL
        array(), // 依赖项
        '1.0.0' // 版本号,可用于清除缓存
    );

// 加载一个 JavaScript 文件
    wp_enqueue_script(
        'mfp-public-script', // 脚本句柄
        plugin_dir_url( __FILE__ ) . 'assets/js/public-script.js', // 脚本 URL
        array( 'jquery' ), // 依赖项,这里依赖 jQuery
        '1.0.0',
        true // 是否在页面底部加载
    );

// 重要:将 PHP 变量安全地传递到 JavaScript
    wp_localize_script(
        'mfp-public-script',
        'mfp_ajax_object', // 在 JS 中访问的对象名
        array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => wp_create_nonce( 'mfp_ajax_nonce' ),
            'default_name' => get_option( 'mfp_default_greeting', 'WordPress 用户' )
        )
    );
}
// 在前端页面加载资源
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_public_assets' );
// 在后台管理页面加载资源(如果需要)
// add_action( 'admin_enqueue_scripts', 'mfp_enqueue_admin_assets' );

Eseguire una semplice richiesta Ajax

Ajax consente di interagire con il server senza dover raffrescare la pagina. WordPress dispone di un processore Ajax integrato.

Hosting condiviso InterServer
Hosting condiviso $2,50 USD al mese, primo mese $0,1 USD codice promozionale tryinterserver, 461 script di applicazioni cloud, installazione con un clic.

Innanzitutto, nel file JavaScript del front end… public-script.js Invia una richiesta a:

jQuery(document).ready(function($) {
    $('#my-button').on('click', function(e) {
        e.preventDefault();
        $.post(
            mfp_ajax_object.ajax_url, // WordPress 提供的 Ajax URL
            {
                action: 'mfp_get_server_time', // 触发的 PHP 钩子标识
                nonce: mfp_ajax_object.nonce, // 安全随机数
            },
            function(response) {
                if (response.success) {
                    $('#result-container').html('服务器时间:' + response.data);
                } else {
                    alert('请求失败:' + response.data);
                }
            }
        );
    });
});

Successivamente, il request viene elaborato sul lato PHP. È necessario creare funzioni di registrazione separate (o congiunte) per gli utenti connessi e per quelli non connessi.

// 处理 Ajax 请求的函数
function mfp_ajax_get_server_time() {
    // 验证 nonce,防止 CSRF 攻击
    check_ajax_referer( 'mfp_ajax_nonce', 'nonce' );

// 处理逻辑
    $server_time = current_time( 'mysql' );

// 返回成功响应(JSON 格式)
    wp_send_json_success( $server_time );
}
// 为登录用户注册处理函数
add_action( 'wp_ajax_mfp_get_server_time', 'mfp_ajax_get_server_time' );
// 为未登录用户注册处理函数(如果功能允许)
add_action( 'wp_ajax_nopriv_mfp_get_server_time', 'mfp_ajax_get_server_time' );

Internazionalizzazione dei plugin e preparazione alla pubblicazione

Per permettere al tuo plugin di essere utilizzato da utenti di WordPress in tutto il mondo, l’internazionalizzazione (i18n) è un passaggio essenziale. È altrettanto importante effettuare test approfonditi e ottimizzazioni prima del rilascio.

Utilizzare la funzione gettext per effettuare la traduzione del testo.

WordPress utilizza il framework GNU gettext per le traduzioni. È necessario incapsulare tutte le stringhe destinate all’utente all’interno di funzioni specifiche.

Modifica la funzione di codice breve precedente in modo che supporti la traduzione:

function mfp_greeting_shortcode_i18n( $atts ) {
    $atts = shortcode_atts( array(
        'name' =&gt; __( '访客', 'my-first-plugin' ), // 默认值也可翻译
    ), $atts, 'mfp_greeting' );

// 使用 sprintf 和 __ 函数组合翻译字符串
    return '<p>' . sprintf( __( '你好,%s!欢迎使用我的第一个插件。', 'my-first-plugin' ), esc_html( $atts['name'] ) ) . '</p>'php
add_shortcode('mfp_greeting', 'mfp_greeting_shortcode_i18n');

Devi utilizzare strumenti come Poedit per analizzare tutti i file presenti nel plugin e individuare quelli che contengono contenuti simili… __(‘文本’, ‘my-first-plugin’) Genera una stringa di caratteri. .pot File di template, e poi creare i file corrispondenti per ogni lingua (ad esempio, il cinese). .po E quello compilato… .mo File, e mettilo dentro. /languages Indice.

Eseguire i test finali e pulire il codice.

Prima di pubblicare il plugin, assicurati di eseguire i seguenti controlli:
1. 功能测试:在全新的 WordPress 安装上激活插件,测试所有功能(短代码、设置、Ajax等)是否按预期工作。
2. 代码审查:检查所有用户输入是否都使用了 esc_html, esc_attr, wp_kses_post Utilizzare funzioni di escape sicuro per tutte le query al database. $wpdb Si utilizzano istruzioni di preparazione per le classi al fine di prevenire gli attacchi di iniezione SQL.
3. 性能检查:确保脚本和样式只在需要的页面加载(可以使用条件标签如 is_admin(), is_single() Eseguite le valutazioni necessarie, ma evitate di eseguire query non necessarie al database ad ogni caricamento della pagina.
4. 文件清理:删除开发过程中使用的调试代码、多余的注释和未使用的文件。
5. README 文件:创建一个详细的 readme.txt Il file deve essere in formato conforme ai requisiti di WordPress.org e deve contenere una descrizione del plugin, istruzioni per l’installazione, informazioni sui problemi più comuni, nonché altri dettagli utili. Questo è un file essenziale per la submission del plugin al catalogo ufficiale di WordPress.

Riassumendo

Seguendo questa guida, hai completato il percorso per passare da un file vuoto alla creazione di un plugin WordPress completo, dotato di codice snello, configurazioni di backend, caricamento di risorse front-end, interazioni Ajax e supporto all’internazionalizzazione. I passaggi fondamentali includono: l’installazione dell’ambiente di sviluppo e la creazione del file principale con i header standard; l’inserimento di funzionalità tramite gli action hooks e i filter hooks; la gestione sicura dei file di risorse; l’implementazione di comunicazioni asincrone tra front-end e backend; nonché la preparazione delle traduzioni e dei test per la pubblicazione a livello globale. Ricorda che sicurezza (escape, validazione, nonce), prestazioni (caricamento su richiesta) e standard (rispetto alle specifiche di codifica di WordPress) rappresentano i tre pilastri fondamentali per lo sviluppo di plugin di alta qualità. Continuando a imparare e a praticare API più avanzate, come i tipi di articoli personalizzati, gli REST API e lo sviluppo dell’editor Blocks, il tuo plugin diventerà ancora più potente.

FAQ - Domande frequenti

È obbligatorio utilizzare la programmazione orientata agli oggetti nello sviluppo di plugin?

Non necessariamente. Per i plugin semplici, l’utilizzo della programmazione procedurale (un insieme di funzioni) è del tutto fattibile e anche più semplice e diretto. Tuttavia, per i plugin di medie e grandi dimensioni e complessi, l’adozione della programmazione orientata agli oggetti (OOP) e di strutture di classe permette di organizzare meglio il codice, di realizzare l’incapsulamento e il riutilizzo dei componenti, e di ridurre i conflitti di nomi; quindi rappresenta una scelta più consigliata.

Come debuggare i problemi presenti in un plugin per WordPress?

Prima di tutto, assicurati che nel wp-config.php Il file è stato aperto. WP_DEBUGWP_DEBUG_LOG Utilizzando costanti, i messaggi di errore verranno registrati correttamente. /wp-content/debug.log Il file viene memorizzato all’interno del sistema, ma non viene visualizzato agli utenti. In secondo luogo, è possibile utilizzare… error_log() La funzione invia i valori delle variabili nel log. Per Ajax o logiche complesse, i pannelli “Rete” (“Network”) e “Console” degli strumenti di sviluppo del browser sono strumenti essenziali per il debug.

Come posso far sì che il mio plugin sia compatibile con il tema attualmente in uso o con altri plugin?

Le migliori pratiche per mantenere la compatibilità sono: seguire rigorosamente le API ufficiali di WordPress e gli standard di codifica; aggiungere un prefisso unico ai nomi delle tue funzioni, classi e punti di interazione (action hooks). mfp_Per evitare conflitti, è necessario verificare l’esistenza di qualsiasi variabile o funzione globale prima di utilizzarla. Per farlo, si può utilizzare un meccanismo di controllo che ne verifica la disponibilità. function_exists()class_exists()E specifica chiaramente nel documento quali tabelle di database sono create dal tuo plugin.选项用户元数据

Quali sono i requisiti per inviare un plugin nel directory di WordPress.org?

你需要拥有一个 WordPress.org 账号,并确保插件完全符合官方的要求。这包括:代码符合 GPL 兼容许可证(通常就是 GPLv2+);插件必须 100% 开源且不依赖外部付费服务才能运行核心功能;包含标准格式的 readme.txt Il file e il codice non contengono contenuti dannosi o inutili; inoltre, hanno superato la verifica effettuata dal team di revisione umana. Prima di inviare il file, si prega di leggere attentamente il manuale di sviluppo ufficiale del plugin e le linee guida per la submission.