Guida definitiva allo sviluppo di plugin per WordPress: costruire estensioni professionali da zero

Lettura di 4 minuti
2026-03-12
2026-06-03
2,309
Guadagno delle commissioni quando fai acquisti tramite i link qui sotto, senza alcun costo aggiuntivo per te.

Fundamenti dello sviluppo di plugin per WordPress

Prima di addentrarsi nel codice, è fondamentale comprendere i concetti di base e la struttura degli plugin per WordPress. Un plugin per WordPress è essenzialmente uno script PHP aggiuntivo che interagisce con il core del sito tramite il sistema di “hook” fornito da WordPress, al fine di estendere o modificare le sue funzionalità. Può trattarsi di un singolo file, oppure di un intero directory che contiene più file, fogli di stile CSS e script JavaScript.

La prima attività nello sviluppo di un plugin è creare un file principale che rispetti gli standard. Di solito, questo file principale prende il nome del plugin stesso, ad esempio…my-custom-plugin.phpAll’inizio di quel file, è necessario includere un blocco di commenti contenente le informazioni standard relative al plugin. Questi commenti non servono solo a descrivere il plugin a WordPress, ma verranno anche visualizzati sulla pagina di gestione dei plugin presente nell’interfaccia amministrativa.

/**
 * Plugin Name: 我的自定义功能扩展
 * Plugin URI:  https://example.com/my-custom-plugin
 * Description: 这是一个用于演示的WordPress插件,用于添加自定义功能。
 * Version:     1.0.0
 * Author:      开发者名称
 * Author URI:  https://example.com
 * License:     GPL v2 or later
 * Text Domain: my-custom-plugin
 */

Nelle note…Plugin NameQuesto campo è obbligatorio; tutti gli altri sono opzionali, ma si consiglia di riempirli. Dopo aver creato questo file, inseritelo nella posizione appropriata./wp-content/plugins/Un folder indipendente all’interno del directory (ad esempio…)my-custom-pluginAll’interno di WordPress, è possibile visualizzarlo e attivarlo sulla pagina “Plugin” presente nell’interfaccia di amministrazione del sito.

Si consiglia di leggere Dall’approccio iniziale alla pratica: Guida completa allo sviluppo di plugin per WordPress e tecniche avanzate

Il meccanismo di funzionamento fondamentale dei plugin per WordPress si basa sui cosiddetti “hook” (ganci). Esistono due tipi di hook: gli action hook e gli event hook.(Action Hooks)“Hook for filters”(Filter Hooks)Gli “action hooks” ti permettono di eseguire codice personalizzato in momenti specifici, ad esempio al caricamento della parte iniziale della pagina o al momento della pubblicazione di un articolo.add_action()La funzione permette di collegare la tua funzione al “hook” dell’azione (action hook).

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

Gli “hook” dei filtri ti permettono di modificare i dati generati durante il processo. Ad esempio, il contenuto degli articoli viene sottoposto a una serie di filtri prima di essere visualizzato.add_filter()Le funzioni possono modificare questi dati.

L’internazionalizzazione e la localizzazione sono componenti essenziali di plugin professionali. Attraverso l’utilizzo di tali strumenti…__( ‘文本’, ‘text-domain’ )_e( ‘文本’, ‘text-domain’ )La funzione incapsula tutte le stringhe visibili dall’utente e, in combinazione con i campi di testo da caricare, consente al plugin di supportare più lingue.Text DomainDeve essere in linea con le informazioni definite nell’intestazione del plugin; di solito si tratta del nome della directory del plugin o della versione del file principale, rappresentata da un “slug”.

Crea il tuo primo plugin funzionale.

Iniziamo creando un semplice plugin che aggiungerà una colonna di gestione personalizzata alla lista degli articoli di un sito web, per visualizzare il numero di parole di ciascun articolo. Questo esempio illustra i passaggi fondamentali per creare un plugin, l’utilizzo dei “hook” (meccanismi di interazione con il sistema) e l’output sicuro dei dati.

Prima di tutto, nel tuo…/wp-content/plugins/Crea una nuova cartella all’interno del directory e dale il nome di…my-first-extensionIn quella cartella, creare il file principale.my-first-extension.phpE aggiungi le informazioni relative ai plugin descritte nella sezione precedente.

Si consiglia di leggere Guida introduttiva allo sviluppo di plugin per WordPress: crea il tuo modulo di funzionalità personalizzato da zero.

Successivamente, dobbiamo aggiungere una nuova colonna alla lista di gestione degli articoli. Questo richiede l’esecuzione di due azioni:manage_posts_columnsmanage_posts_custom_columnIl primo elemento viene utilizzato per definire il titolo della nuova colonna, mentre il secondo viene utilizzato per inserire il contenuto di ciascuna riga di quella colonna.

// 为文章列表添加“字数统计”列
function mfe_add_word_count_column( $columns ) {
    $columns['word_count'] = __( '字数统计', 'my-first-extension' );
    return $columns;
}
add_filter( 'manage_posts_columns', 'mfe_add_word_count_column' );

// 填充“字数统计”列的内容
function mfe_display_word_count_column( $column, $post_id ) {
    if ( $column === 'word_count' ) {
        $post_content = get_post_field( 'post_content', $post_id );
        $word_count = str_word_count( strip_tags( $post_content ) );
        echo esc_html( $word_count );
    }
}
add_action( 'manage_posts_custom_column', 'mfe_display_word_count_column', 10, 2 );

In questo pezzo di codice,mfe_add_word_count_columnLa funzione riceve un array di colonne esistenti e ne aggiunge una nuova.word_countRestituisce l’array modificato.add_filterConnettilo a…manage_posts_columnsSul filtro.mfe_display_word_count_columnLa funzione verifica innanzitutto se la colonna attualmente in esame è quella “word_count” che abbiamo aggiunto, quindi recupera il contenuto dell’articolo e lo utilizza…strip_tags()Rimuovi i tag HTML e poi utilizzalo di nuovo.str_word_count()Calcola il numero di parole (per il cinese si tratta del numero di caratteri), e infine utilizzalo.esc_html()Esegui l’escapamento di sicurezza e poi visualizza il risultato.

Questo semplice plugin dispone già delle funzionalità di base, ma un plugin più professionale dovrebbe anche prevedere l’esecuzione di alcune operazioni al momento dell’attivazione o della disattivazione dello stesso. Ad esempio, è possibile creare tabelle personalizzate nel database o eliminare opzioni temporanee. Questo può essere realizzato registrando dei “hook” (meccanismi di interazione) per l’attivazione e la disattivazione del plugin.

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 mfe_plugin_activation() {
    // 例如:添加一个版本号选项,用于后续升级判断
    if ( ! get_option( 'mfe_plugin_version' ) ) {
        add_option( 'mfe_plugin_version', '1.0.0' );
    }
    // 触发一个自定义动作,供其他开发者扩展
    do_action( 'mfe_plugin_activated' );
}
register_activation_hook( __FILE__, 'mfe_plugin_activation' );

// 插件停用时执行的操作
function mfe_plugin_deactivation() {
    // 例如:清除计划任务或临时数据
    // 注意:通常不在停用时删除用户数据(如表)
}
register_deactivation_hook( __FILE__, 'mfe_plugin_deactivation' );

Si prega di notare che…register_activation_hookregister_deactivation_hookÈ necessario il percorso completo del file principale.FILELa costante deve essere utilizzata come primo parametro. La logica per attivare, disattivare e rimuovere i plugin (la rimozione avviene quando l’utente elimina il plugin stesso) deve essere gestita in modo separato.

Implementare la pagina di configurazione degli plugin

Un plugin ben funzionante di solito deve offrire agli utenti delle opzioni di configurazione. Il modo più standard per farlo è creare una pagina di impostazioni nel backend di WordPress. Questo può essere realizzato utilizzando…add_menu_page()add_options_page()Questo può essere realizzato utilizzando funzioni come la funzione "filter" e la funzione "map".

Creiamo prima un elemento di menu di livello superiore. Nel seguente esempio,mfe_create_admin_menuUtilizzo delle funzioniadd_menu_page()Aggiungiamo una nuova pagina. Questa funzione richiede il titolo della pagina, il titolo del menu, i permessi necessari, il “slug” del menu, una funzione di callback per l’output del contenuto della pagina, l’URL dell’icona e la posizione all’interno del menu.

Si consiglia di leggere Partire da zero: Guida completa allo sviluppo di plugin per WordPress e condivisione delle migliori pratiche

// 创建后台管理菜单
function mfe_create_admin_menu() {
    add_menu_page(
        __( '我的扩展设置', 'my-first-extension' ), // 页面标题
        __( '我的扩展', 'my-first-extension' ),      // 菜单标题
        'manage_options',                           // 权限(管理员)
        'mfe-settings',                             // 菜单slug
        'mfe_settings_page_html',                   // 显示页面内容的函数
        'dashicons-admin-generic',                  // 图标
        80                                          // 位置
    );
}
add_action( 'admin_menu', 'mfe_create_admin_menu' );

Di seguito, abbiamo bisogno di definiremfe_settings_page_htmlLe funzioni vengono utilizzate per rendere il contenuto della pagina. Una pagina di configurazione professionale dovrebbe utilizzare l’API di configurazione standard di WordPress, che si occupa di gestire il submission dei moduli, la validazione dei campi e altre operazioni complesse (come quelle non sicure). Prima di tutto, dobbiamo utilizzare…register_setting()Registra un gruppo di impostazioni e dei campi.

// 初始化设置
function mfe_settings_init() {
    // 注册一个新的设置组 “mfe_settings_group” 到页面 “mfe-settings”
    register_setting( 'mfe-settings', 'mfe_settings_options' );

// 在设置组内添加一个区域(Section)
    add_settings_section(
        'mfe_settings_section',
        __( '基本设置', 'my-first-extension' ),
        'mfe_settings_section_cb',
        'mfe-settings'
    );

// 在区域内添加一个字段
    add_settings_field(
        'mfe_field_api_key',
        __( 'API密钥', 'my-first-extension' ),
        'mfe_field_api_key_cb',
        'mfe-settings',
        'mfe_settings_section',
        [ 'label_for' => 'mfe_field_api_key' ]
    );
}
add_action( 'admin_init', 'mfe_settings_init' );

Successivamente, dobbiamo definire le funzioni di callback per le aree e per i campi, al fine di generare il codice HTML necessario. Le funzioni di callback per i campi sono particolarmente importanti, poiché sono responsabili della visualizzazione degli input presenti nel form e assicurano che i loro valori siano correttamente associati alle impostazioni salvate.

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.
// 设置区域的说明文本
function mfe_settings_section_cb( $args ) {
    ?>
    <p id="<?php echo esc_attr( $args['id'] ); ?>"><?php esc_html_e( '请在此配置插件的基本参数。', 'my-first-extension' ); ?></p>
    <?php
}

// API密钥字段的回调函数
function mfe_field_api_key_cb( $args ) {
    // 从已注册的设置选项中获取值
    $options = get_option( 'mfe_settings_options' );
    $value = $options[ $args['label_for'] ] ?? '';
    ?>
    <input type="text"
           id="<?php echo esc_attr( $args['label_for'] ); ?>"
           name="mfe_settings_options[<?php echo esc_attr( $args['label_for'] ); ?>]"
           value="<?php echo esc_attr( $value ); ?>"
           class="regular-text">
    <p class="description"><?php esc_html_e( '请输入您的服务API密钥。', 'my-first-extension' ); ?></p>
    &lt;?php
}

Infine, creiamo la funzione per la pagina delle impostazioni principali, utilizzando…settings_fields()do_settings_sections()Esegui l’output dell’intero modulo in modo sicuro.

// 设置页面的HTML结构
function mfe_settings_page_html() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/it/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出安全字段、区域和字段
            settings_fields( 'mfe-settings' );
            do_settings_sections( 'mfe-settings' );
            submit_button( __( '保存设置', 'my-first-extension' ) );
            ?>
        <input type="hidden" name="trp-form-language" value="it"/></form>
    </div>
    &lt;?php
}

In questo modo, quando viene creata una pagina di configurazione, tutte le operazioni di verifica, pulizia e salvataggio dei dati dei moduli vengono gestite automaticamente dall’API di configurazione di WordPress e memorizzate…wp_optionsNella tabella, il campo denominato…mfe_settings_optionsTra le opzioni disponibili, è stato possibile migliorare notevolmente sia la sicurezza che la comodità d’uso.

Sicurezza dei plugin e migliori pratiche di utilizzo

Per sviluppare un plugin professionale, sicuro e facile da mantenere, è necessario seguire una serie di best practice. Il principio fondamentale è: non fidarsi mai degli input forniti dagli utenti. Tutti i dati provenienti da fonti esterne (ad esempio, da siti web esterni o da utenti) devono essere verificati e trattati con attenzione per prevenire potenziali problemi di sicurezza.$_GET$_POST$_COOKIEI dati provenienti da fonti diverse (compresi i database) devono essere adeguatamente verificati, puliti ed escapeati prima di essere visualizzati, utilizzati o memorizzati.

Verifica e pulizia dei dati: prima di utilizzare i dati per un giudizio logico, è necessario verificare che siano conformi al formato previsto. Ad esempio, se un campo deve contenere un numero, è necessario utilizzareintval()is_numeric()WordPress offre molte funzioni di aiuto, come…sanitize_text_field()Utilizzato per pulire stringhe di testo.sanitize_email()Utilizzato per pulire gli indirizzi e-mail.

Encoding dei dati: quando si esportano dati in HTML, JavaScript o URL, è necessario effettuare l'encoding per prevenire gli attacchi XSS (Cross-site scripting). Utilizzare <esc_html()Output come testo puro in HTML,esc_attr()Il risultato verrà visualizzato negli attributi HTML.esc_url()Eseguisci l’operazione di output per ottenere l’URL richiesto.wp_json_encode()Abbinamentowp_slash()Esegui il codice in JavaScript.

Un errore di sicurezza comune è l’utilizzo diretto di variabili non verificate nelle query al database, il che può portare all’iniezione di codice SQL (SQL injection). Non si dovrebbe mai concatenare manualmente le istruzioni SQL; è consigliabile utilizzare i strumenti forniti da WordPress per generare le query in modo sicuro.$wpdbClassi e i loro metodi per la preparazione delle query.

global $wpdb;
$user_input = $_POST['search_term'];
// 错误做法:直接拼接
// $sql = “SELECT * FROM {$wpdb->posts} WHERE post_title LIKE ‘%$user_input%’”;
// 正确做法:使用prepare方法
$sql = $wpdb->prepare(
    “SELECT * FROM {$wpdb->posts} WHERE post_title LIKE %s”,
    ‘%’ . $wpdb->esc_like( $user_input ) . ‘%’
);
$results = $wpdb->get_results( $sql );

Controllo dei diritti: Prima di eseguire qualsiasi operazione di gestione, modifica dei dati o visualizzazione di informazioni sensibili da parte di un plugin, è necessario verificare se l’utente attuale abbia i diritti per eseguire tale operazione.current_user_can( $capability )check_admin_referer()Vengono effettuate verifiche su questi elementi.

Caricamento sequenziale di script e fogli di stile: non fate mai il caricamento diretto di questi elementi all’interno di un plugin.<link><script>Per introdurre file CSS e JS tramite i tag, è consigliabile utilizzare i seguenti metodi:wp_enqueue_style()wp_enqueue_script()Funzione, e assicurarsi che venga utilizzata nei punti giusti (ad esempio, nei hook appropriati).wp_enqueue_scriptsUtilizzato per il front-end.admin_enqueue_scriptsViene eseguito nel backend, il che permette di evitare conflitti e di garantire che le dipendenze vengano caricate correttamente.

Organizzazione del codice e convenzioni di denominazione: utilizzare un prefisso univoco per i nomi delle funzioni, delle classi, delle variabili e delle opzioni del tuo plug-in (ad esempio, <).mfe_Per evitare conflitti con l’argomento principale del progetto, con altri plugin o con il codice sorgente di WordPress, è consigliabile organizzare i plugin complessi in più file. L’utilizzo della programmazione orientata agli oggetti (Object-Oriented Programming, OOP) permette di migliorare la leggibilità e la riutilizzabilità del codice.

Fornire una funzione di disinstallazione e pulizia: Se il plugin ha creato tabelle nel database o opzioni personalizzate, è opportuno offrire la possibilità di eliminare tali elementi quando l’utente decide di “rimuovere” il plugin (e non semplicemente di “disattivarlo”). Questa funzione può essere realizzata attraverso un file di disinstallazione dedicato. Nel file principale del plugin, è possibile includere le istruzioni necessarie per eseguire tali operazioni.register_uninstall_hook( FILE, ‘mfe_plugin_uninstall’ )Per registrare la funzione di disinstallazione, è possibile procedere in questo modo; tuttavia, la pratica più comune consiste nel creare un file specifico all’interno della directory dei plugin.uninstall.phpWordPress esegue automaticamente quel file quando si elimina un plugin.

Riassumendo

Lo sviluppo di plugin per WordPress è un processo che combina un pensiero strutturato con una profonda comprensione dell’architettura di base di WordPress. Dalla scrittura delle informazioni di intestazione del plugin in conformità agli standard, alla comprensione e all’utilizzo efficace degli “action hooks” e dei “filter hooks”, tutti questi elementi costituiscono le basi per creare qualsiasi estensione di funzionalità. Per creare un plugin pratico, non è sufficiente implementare le funzionalità front-end; è anche necessario creare un’interfaccia di configurazione back-end chiara e sicura, il che può essere realizzato in modo efficiente tramite l’API di configurazione di WordPress.

La sicurezza rappresenta una linea di vita fondamentale in ogni fase del processo di sviluppo: dalla verifica dei dati in ingresso, all’elaborazione dei dati in uscita, al controllo degli accessi e alle operazioni su database. Nessun passaggio può essere trascurato. Seguendo le migliori pratiche – come l’ordinamento corretto dell’esecuzione dei script, l’utilizzo di prefissi unici e una struttura del codice ben organizzata – il tuo plugin diventerà più robusto, più facile da mantenere e potrà integrarsi armoniosamente nell’ampia comunità di WordPress. Attraverso i passaggi descritti in questa guida, hai acquisito le conoscenze e le competenze essenziali per creare un plugin di livello professionale partendo da zero.

FAQ - Domande frequenti

Come posso aggiungere un codice breve al mio plugin?

I codici brevi consentono agli utenti di inserire facilmente funzionalità di plugin all’interno di articoli o pagine.add_shortcode()Utilizza una funzione per registrare il tuo codice breve.

Crea una funzione di callback che gestisca la logica per i codici brevi; questa funzione riceve come parametro un oggetto che contiene le proprietà necessarie per l’elaborazione.$atts) e il contenuto ($content)参数,并返回处理后的HTML。记住,短码回调函数必须返回(return)内容,而不是直接输出(echo)。返回的内容也需要进行适当的转义以确保安全。

Dove dovrebbero essere memorizzate le opzioni dei plugin?

Per la configurazione di semplici coppie chiave-valore, si consiglia caldamente di utilizzare l’API Options di WordPress.add_option()get_option()update_option()Funzioni. Questi dati verranno automaticamente memorizzati.wp_optionsNella tabella del database.

Se il tuo plugin necessita di memorizzare una grande quantità di dati strutturati (ad esempio, elementi di formulari o log), dovresti considerare la creazione di tabelle personalizzate nel database.dbDelta()Esistono funzioni per garantire che la creazione e l’aggiornamento della struttura dei database siano processi sicuri e compatibili con i sistemi esistenti. La creazione di tabelle personalizzate viene solitamente eseguita all’interno dei “hook” di attivazione dei plugin.

Come può il mio plugin essere compatibile con altri plugin o temi?

La chiave per migliorare la compatibilità è seguire gli standard di codifica di WordPress, utilizzare prefissi unici e sfruttare gli “hook” (meccanismi di integrazione) per aggiungere funzionalità aggiuntive. È importante evitare di modificare direttamente i file di codice principali o le variabili globali di WordPress.

Nel tuo plugin, utilizza…do_action()apply_filters()Per creare hook personalizzati, è possibile permettere ad altri sviluppatori di modificare o estendere il funzionamento del proprio plugin. Inoltre, prima di eseguire operazioni che potrebbero causare conflitti (ad esempio, l’aggiunta di stili o script), è consigliabile utilizzare controlli condizionali o fornire opzioni per disattivare tali funzionalità.

Come aggiungere un meccanismo di aggiornamento a un plugin?

Per i plugin ospitati nel catalogo ufficiale di plugin di WordPress, gli aggiornamenti vengono gestiti automaticamente. Per i plugin privati o commerciali, è necessario implementare un proprio sistema personalizzato per verificare la disponibilità di aggiornamenti.

Di solito si tratta di creare una classe che controlli regolarmente il server remoto alla ricerca di nuove versioni e che permetta agli utenti di aggiornare il software con un semplice clic. Puoi fare riferimento a librerie come “Plugin Update Checker” oppure implementare il tutto da solo; l’elemento fondamentale è l’utilizzo di meccanismi di comunicazione tra il software locale e il server remoto per ricevere le informazioni sull’aggiornamento.set_site_transient()Ganci (ad esempio…)pre_set_site_transient_update_pluginsUtilizza questo metodo per inserire le tue informazioni di aggiornamento. Assicurati che il server di aggiornamento sia sicuro e affidabile.