Imparare a sviluppare plugin per WordPress da zero: principi, pratiche e tecniche avanzate

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

I plugin per WordPress rappresentano il meccanismo fondamentale per estendere le funzionalità di base del sistema. Grazie ai plugin, è possibile aggiungere all’website funzionalità illimitate, senza dover modificare il codice sorgente di WordPress stesso. Lo sviluppo di plugin segue una serie di convenzioni e best practice al fine di garantirne la sicurezza, le prestazioni e la manutenibilità. Un plugin standard richiede almeno un file principale, il cui nome corrisponde generalmente al nome del plugin stesso. my-awesome-plugin.phpQuesto articolo partirà dai concetti di base per guidarti passo dopo passo nel mondo dello sviluppo di plugin.

Comprendere i principi di base di un plugin.

Un plugin per WordPress è essenzialmente uno o più file PHP, memorizzati all’interno della struttura del sito web. /wp-content/plugins/ Il plugin interagisce con il core di WordPress tramite l’API e il sistema di “Hook” forniti da WordPress stesso.

Il meccanismo di funzionamento del sistema di hooking

Il sistema dei “hook” (ganci) rappresenta il cuore dello sviluppo di plugin per WordPress. Gli sviluppatori possono integrarsi nel flusso di lavoro predefinito di WordPress in due modi principali: tramite “azioni” (Actions) e “filtri” (Filters). Le azioni permettono di eseguire codice personalizzato in momenti specifici, mentre i filtri consentono di modificare i dati che vengono passati durante il processo.

Si consiglia di leggere Sviluppo di plugin per WordPress: dall’approccio base alla maestria: impara passo dopo passo a creare le tue funzionalità personalizzate

Ad esempio, utilizzando… add_action() Una funzione può registrare un “action hook”. Quando WordPress arriva a quel punto specifico del codice, esegue la funzione di callback che hai associato.

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

Informazioni sull’intestazione standard del file del plugin

Ogni file PHP principale di un plugin deve contenere un blocco di commenti all’inizio del file standardizzato, utilizzato per fornire a WordPress le informazioni di metadati del plugin. Queste informazioni influenzano l’aspetto del plugin nella pagina di gestione dei plugin presente nell’interfaccia amministrativa di WordPress.

<?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
 */

Caricamento e attivazione degli plugin

Quando un utente attiva un plugin tramite l’interfaccia di back-end di WordPress, WordPress esegue il codice contenuto nel file principale del plugin ogni volta che una pagina viene caricata (a condizione che tale codice non si trovi all’interno di funzioni o non sia protetto da condizioni specifiche). Per questo motivo, si consiglia generalmente di incapsulare tutto il codice funzionale all’interno di funzioni o classi e di richiamarlo tramite degli “hook” (meccanismi di integrazione), al fine di evitare che venga eseguito quando il plugin non è attivo.

Crea il tuo primo plugin.

Diamo il via alla creazione di un semplice plugin che abbia la funzione di aggiungere automaticamente una dichiarazione di copyright alla fine di tutti i contenuti degli articoli sul sito web.

Creare il file del plugin principale

Prima di tutto, /wp-content/plugins/ Crea una nuova cartella all’interno del directory e dale il nome di… my-first-pluginPoi crea il file principale all’interno di quella cartella. my-first-plugin.phpE aggiungi le informazioni relative ai header dei file standard sopra menzionate.

Si consiglia di leggere Sviluppo di plugin per WordPress: Da principianti a esperti: Una guida completa per creare moduli con funzionalità altamente personalizzabili

Modificare il contenuto di un articolo utilizzando filtri.

Utilizzeremo… the_content Utilizza dei filtri per modificare l’output degli articoli. Aggiungi il seguente codice al tuo file principale:

function myfp_add_copyright_to_content($content) {
    // 确保只在文章主循环中、且非管理后台执行
    if (is_single() &amp;&amp; !is_admin()) {
        $copyright_text = '<p><em>Il copyright di questo articolo appartiene a questo sito; per ripubblicarlo, è necessario indicare la fonte.</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
add_filter( 'the_content', 'myfp_add_copyright_to_content' );

myfp_add_copyright_to_content La funzione riceve un parametro. $contentIl contenuto dell’articolo, cioè il testo effettivamente presente nel documento, viene ottenuto tramite funzioni di valutazione condizionale. is_single()Assicurarsi che venga aggiunto soltanto sulla pagina di un singolo articolo. !is_admin() In questo modo, il testo relativo ai diritti d’autore non verrà visualizzato nell’editor di back-end.

La localizzazione dei plugin

Per rendere il plugin compatibile con più lingue, è necessario effettuare il processo di internazionalizzazione (i18n). Innanzitutto, tale processo è già stato avviato all’interno del file principale, all’inizio del codice. Text Domain: my-first-pluginPoi, al momento dell’inizializzazione del plugin, vengono caricati i file delle lingue.

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%

Di solito, utilizziamo… plugins_loaded Utilizzare azioni per caricare le traduzioni in modo sicuro. __()_e() Utilizzare funzioni come `wrap` per incapsulare tutte le stringhe che devono essere tradotte.

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

Modalità di sviluppo di plugin avanzati

Quando le funzionalità di un plugin diventano più complesse, l’utilizzo di approcci di sviluppo orientati agli oggetti (OOP – Object-Oriented Programming) e più strutturati garantisce una migliore organizzazione, incapsulazione e manutenibilità del codice.

Adottare la programmazione orientata agli oggetti

Utilizzare delle classi per incapsulare tutte le funzionalità di un plugin è una scelta saggia. Questo permette di evitare conflitti tra i nomi delle funzioni e garantisce una struttura del codice chiara e ordinata.

Si consiglia di leggere Analisi approfondita: Imparare da zero i fondamenti e le pratiche essenziali dello sviluppo di plugin per WordPress

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;">Il supporto tecnico è fornito da My Advanced Plugin.</p>';
    }

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

Aggiungere una pagina per la configurazione dell’interfaccia di amministrazione.

Molti plugin richiedono di fornire all’utente opzioni di configurazione. Aggiungere pagine di impostazioni nel backend di WordPress solitamente implica l’utilizzo di specifici strumenti o procedure. add_menu_page()add_submenu_page() La funzione, in combinazione con l’API Settings, permette di salvare in modo sicuro le impostazioni desiderate.

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>I miei setting per il plugin</h1>
            <form method="post" action="/it/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="it"/></form>
        </div>
        &lt;?php
    }

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

Creare tabelle di database personalizzate

Per alcuni plugin che necessitano di memorizzare dati complessi, potrebbe essere necessario creare tabelle di dati personalizzate. Questo lavoro dovrebbe essere eseguito al momento dell’attivazione del plugin.

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.

WordPress fornisce una comoda classe per l’operazione sui database. wpdbIl codice per la creazione della tabella viene solitamente inserito in un file tramite l'istruzione INSERT INTO. register_activation_hook Nella funzione registrata.

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');

La sicurezza e la distribuzione dei plugin

Prima di lanciare un plugin, è essenziale verificarne la sicurezza e comprendere i processi di distribuzione fondamentali.

Attuare le migliori pratiche di sicurezza

Tutti i dati ricevuti dagli utenti, indipendentemente dal loro origine… $_GET$_POST Anche i dati provenienti dai database devono essere verificati, puliti e “escapati” (cioè i caratteri speciali devono essere convertiti in forme compatibili con il sistema). Utilizzate sempre le funzioni fornite da WordPress per queste operazioni. esc_html()wp_strip_all_tags()intval() E inoltre prepare() Metodi per gestire le query SQL al fine di prevenire attacchi XSS (Cross-Site Scripting) e SQL Injection.

Per i controlli sulla capacità di eseguire operazioni amministrative o critiche, è essenziale utilizzare funzioni dedicate a tali controlli. Ad esempio… current_user_can('manage_options')check_ajax_referer()

Preparare il plugin per la sua submission nel catalogo ufficiale.

Se desideri distribuire il plugin gratuitamente agli utenti di tutto il mondo, puoi inviarlo al catalogo di plugin di WordPress.org. Per farlo, devi seguire rigorosamente alcune norme: utilizzare SVN per la gestione delle versioni, garantire la qualità del codice, fornire i file di traduzione, ecc. Un plugin ben realizzato aumenta le possibilità che venga utilizzato da un numero maggiore di utenti. readme.txt Il file è obbligatorio e segue un formato specifico, utilizzato per visualizzare le informazioni sulla pagina dei dettagli del plugin.

Riassumendo

Lo sviluppo di plugin per WordPress inizia con la comprensione del sistema di hook centrali del framework, per poi passare gradualmente all’apprendimento della creazione di funzionalità, alla gestione dell’interfaccia di amministrazione, al trattamento dei dati, nonché all’attenzione alla sicurezza e alla distribuzione dei plugin stessi. I principianti dovrebbero iniziare creando plugin che includano semplici meccanismi di filtraggio, per poi provare a utilizzare tecniche di programmazione orientata agli oggetti, aggiungere pagine di configurazione e gestire tabelle di database personalizzate. È fondamentale ricordare che la sicurezza rappresenta la priorità assoluta nello sviluppo: l’uso efficace delle numerose funzioni di sicurezza fornite da WordPress è essenziale per creare plugin affidabili. Seguendo gli standard di sviluppo e le migliori pratiche, i propri plugin saranno non solo facili da mantenere, ma anche ben preparati per essere pubblicati nel catalogo ufficiale di WordPress o su piattaforme di distribuzione di plugin.

FAQ - Domande frequenti

Quanti file sono necessari almeno per un plugin?

Un plugin richiede almeno un file PHP. Basta che questo file contenga le informazioni corrette relative all’intestazione del plugin e che venga salvato nella posizione appropriata. /wp-content/plugins/ All’interno di un directory o dei suoi sottodirectory, WordPress sarà in grado di riconoscerlo e caricarlo.

Certo, con l’aumentare della complessità delle funzionalità, suddividere il codice in più file (come JavaScript, CSS, file di classi PHP separate, ecc.) rappresenta un modo migliore per organizzarlo.

Qual è la differenza tra gli “hook” e i “filter” dei plugin per WordPress?

Gli Action Hooks e i Filter Hooks, sebbene a volte vengano definiti entrambi “hook”, hanno scopi diversi.

Gli action hooks permettono di inserire un codice personalizzato in determinati punti del ciclo di vita di WordPress. Non richiedono il ritorno di valori; il loro scopo è semplicemente eseguire un’azione specifica, come inviare un’e-mail o registrare un evento nel log. La funzione principale utilizzata per gestire gli action hooks è… add_action()do_action()

Gli “hook” dei filtri ti permettono di “modificare” il valore di una variabile (solitamente una stringa o un array). Il sistema si aspetta che la tua funzione di callback restituisca il valore modificato. La funzione principale è… add_filter()apply_filters()

In parole semplici: un’azione consiste nel “fare qualcosa”, mentre un filtro serve a “modificare dei dati”.

Come evitare che i nomi delle funzioni dei plugin siano in conflitto con quelli del tema o di altri plugin?

Il metodo migliore è utilizzare la programmazione orientata agli oggetti, incapsulando tutte le tue funzionalità all’interno di una classe. In questo modo, solo i nomi delle classi e dei metodi devono essere unici.

Se si utilizza la programmazione procedurale, è necessario aggiungere un prefisso unico e facilmente riconoscibile a tutti i nomi delle funzioni, delle costanti e delle variabili globali. Di solito si utilizzano i nomi dei plugin o delle loro abbreviazioni come prefisso. Ad esempio, se il tuo plugin si chiama “Super Tool”, i nomi delle funzioni potrebbero essere del tipo: stool_get_data()stool_OPTION_KEY Ecco fatto.

Un altro metodo più efficace è l’utilizzo dei namespace in PHP, che permette di isolare il codice in modo ottimale.

Come gestire le impostazioni e le opzioni degli utenti nello sviluppo di plugin?

WordPress consiglia vivamente l’utilizzo del proprio API Settings per gestire le opzioni dei plugin. Questo API si occupa della memorizzazione sicura delle informazioni relative a tali opzioni. wp_options L’utilizzo di meccanismi di verifica non basati su certificati SSL (non CE), la corretta visualizzazione dei dati nei campi e la corretta invio dei moduli rappresenta un approccio sicuro e standardizzato.

I passaggi principali includono: l’utilizzo di… register_setting() Registra un gruppo di opzioni e utilizzalo. add_settings_section()add_settings_field() Aggiungi le aree di configurazione e i campi necessari, e infine utilizzali sul lato front-end. settings_fields()do_settings_sections() È possibile generare così un modulo di configurazione completo. Per salvare le impostazioni, utilizzare… update_option() Funzione.