Hai mai pensato di creare un tuo plugin per WordPress? Può sembrare complicato, ma con gli strumenti giusti e un approccio passo-passo, è più accessibile di quanto pensi. In questo post, vedremo come creare un plugin semplice ma utile: una modalità di manutenzione personalizzabile per il tuo sito. Seguiremo insieme l’intero processo, dalla scrittura del codice alla preparazione per la distribuzione, inclusa la traduzione multilingua e il controllo di conformità. Per esemplificare il processo utilizzeremo un caso reale: la creazione di un plugin di manutenzione per i miei clienti del mio brand OperWEB.
Cosa creeremo: Un plugin “OperWEB Maintenance Mode” (ma voi chiamatelo come volete) che:
- Mostra una pagina di manutenzione personalizzata ai visitatori.
- Permette agli amministratori di vedere il sito normalmente.
- Ha una pagina di impostazioni per attivare/disattivare, caricare un logo, inserire testo e scegliere colori.
- È traducibile in diverse lingue (Italiano e Inglese inclusi).
- È conforme agli standard di WordPress.org.
Strumenti che useremo:
- Un editor di codice (es. VS Code, Sublime Text, ecc.)
- Una installazione locale o di test di WordPress
- Il plugin Loco Translate (gratuito)
- Il plugin Plugin Check (gratuito, da WordPress.org)
1. La Struttura Base del Plugin
Ogni plugin inizia con una cartella e un file PHP principale.
- Crea la Cartella: Dentro la tua cartella
wp-content/plugins/
, crea una nuova cartella. Chiamiamolaoperweb-maintenance-mode
. - Crea il File Principale: Dentro questa cartella, crea un file chiamato
operweb-maintenance-mode.php
. - L’Intestazione (Header): Apri il file e inserisci l’intestazione PHP. Questa dice a WordPress tutto sul tuo plugin:
<?php
/**
* Plugin Name: OperWEB Maintenance Mode
* Description: Attiva una pagina di manutenzione personalizzata con opzioni.
* Version: 2.3.3
* Author: Fabrizio Ortis | OperWEB
* Author URI: https://www.operweb.com
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: operweb-maintenance-mode
* Domain Path: /languages
*/
// Impedisci l'accesso diretto
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// ... il resto del codice del plugin andrà qui ...
Plugin Name, Description, Author, etc.: Informazioni mostrate nella bacheca.
License: Fondamentale per la distribuzione (GPLv2 or later è lo standard).
Text Domain & Domain Path: Cruciali per le traduzioni (ne parleremo dopo).
2. La Logica Principale: Mostrare la Pagina
Vogliamo che il nostro plugin controlli ogni caricamento di pagina sul frontend e, se necessario, mostri la pagina di manutenzione. Usiamo l’hook template_redirect
.
function owm_maintenance_mode_check() {
$options = get_option( 'owm_options' ); // Legge le impostazioni (che creeremo dopo)
// 1. Manutenzione attiva dalle impostazioni?
if ( empty( $options['enable'] ) || $options['enable'] != 1 ) {
return; // No, non fare nulla.
}
// 2. L'utente è un admin?
if ( current_user_can( 'manage_options' ) ) {
return; // Sì, mostra il sito normale.
}
// 3. Per tutti gli altri: mostra la pagina di manutenzione
$maintenance_file = plugin_dir_path( __FILE__ ) . 'maintenance.php'; // Il nostro file template
if ( file_exists( $maintenance_file ) ) {
// Invia header HTTP 503 (importante per SEO)
if ( ! headers_sent() ) {
header( 'HTTP/1.1 503 Service Unavailable', true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
header( 'Retry-After: 3600' ); // Riprova tra 1 ora
}
// Carica il template e ferma WordPress
include( $maintenance_file );
die();
}
}
add_action( 'template_redirect', 'owm_maintenance_mode_check' );
Avremo bisogno anche di un file maintenance.php
nella stessa cartella, che conterrà l’HTML e il CSS della nostra pagina (lo vedremo dopo).
3. Creare una Pagina di Impostazioni (Settings API)
Per permettere all’utente di configurare il plugin, usiamo la Settings API di WordPress. È un po’ “verbosa” ma potente.
- Aggiungere la Pagina: Usiamo
add_options_page()
per aggiungere una voce sotto “Impostazioni” nel menu admin. - Registrare le Impostazioni: Con
register_setting()
, diciamo a WordPress quale opzione salvare nel database (es.owm_options
) e quale funzione usare per “pulire” i dati (owm_sanitize_options
). - Definire Sezioni e Campi: Usiamo
add_settings_section()
eadd_settings_field()
per definire la struttura della pagina e i singoli campi (checkbox, uploader logo, editor testo, color picker). - Funzioni Callback: Ogni campo ha bisogno di una funzione PHP che stampa il suo HTML (es.
owm_field_enable_cb()
per la checkbox). - Render Pagina: Una funzione (
owm_options_page_html()
) stampa l’HTML base della pagina, il tag<form>
e usasettings_fields()
edo_settings_sections()
per far apparire tutto.
(Nota: Il codice completo per la Settings API è abbastanza lungo, lo trovi nel file finale del plugin che trovi in fondo al post e potrai modificare liberamente. Qui ci concentriamo sui concetti).
Per campi avanzati come l’uploader media e il color picker, dobbiamo anche “accodare” gli script e gli stili necessari usando wp_enqueue_media()
, wp_enqueue_style('wp-color-picker')
e wp_enqueue_script()
.
4. Internazionalizzazione (i18n): Preparare per la Traduzione
Per rendere il plugin multilingua:
- Text Domain & Domain Path: Assicurati che siano definiti nell’header del plugin.
Text Domain
è un identificatore unico (es.operweb-maintenance-mode
),Domain Path
dice a WordPress dove trovare i file di lingua (es./languages
). - Marcare le Stringhe: Ogni stringa di testo visibile all’utente (nel backend o nel frontend) deve essere “avvolta” in una funzione di traduzione:
__( 'Stringa da tradurre', 'operweb-maintenance-mode' )
: Restituisce la stringa tradotta (per usarla in variabili o funzioni)._e( 'Stringa da tradurre', 'operweb-maintenance-mode' )
: Stampa direttamente la stringa tradotta (echo).esc_html__(...)
,esc_attr__(...)
,esc_html_e(...)
,esc_attr_e(...)
: Come sopra, ma fanno anche l’escape per sicurezza prima di restituire/stampare.printf()
/sprintf()
: Se hai variabili dentro una stringa, usa queste funzioni con commenti/* translators: ... */
per spiegare i segnaposto.
// Prima:
echo '<h1>Sito in Manutenzione</h1>';
// Dopo:
echo '<h1>' . esc_html__( 'Sito in Manutenzione', 'operweb-maintenance-mode' ) . '</h1>';
5. Tradurre con Loco Translate
Ora che il codice è pronto, usiamo Loco Translate per creare i file di lingua:
- Installa e Attiva: Aggiungi il plugin Loco Translate al tuo sito di test.
- Vai su Loco Translate > Plugins: Trova “OperWEB Maintenance Mode” e cliccaci.
- Crea Modello (.pot): Clicca “Crea modello”. Conferma per salvarlo in
languages/operweb-maintenance-mode.pot
. Questo file contiene l’elenco di tutte le stringhe originali. - Crea Traduzione Italiana (it_IT):
- Clicca “Nuova lingua”.
- Scegli “Italiano (Italia)”.
- Importante: Scegli la posizione “File dell’autore” (salverà in
wp-content/plugins/operweb-maintenance-mode/languages/
). - Clicca “Inizia a tradurre”.
- Copia ogni stringa sorgente nella casella di traduzione.
- Clicca “Salva”. Verranno creati
it_IT.po
(modificabile) eit_IT.mo
(compilato).
- Crea Traduzione Inglese (en_US):
- Clicca di nuovo “Nuova lingua”.
- Scegli “Inglese (Stati Uniti)”.
- Scegli la posizione “File dell’autore”.
- Clicca “Inizia a tradurre”.
- Traduci ogni stringa italiana in inglese.
- Clicca “Salva”. Verranno creati
en_US.po
een_US.mo
.
6. Recuperare i File di Traduzione
I file .pot
, .po
e .mo
sono stati creati da Loco Translate direttamente sul tuo server, nella cartella /wp-content/plugins/operweb-maintenance-mode/languages/
.
Se non hai lavorato su un server locale devi scaricare questi file (usando FTP, SFTP o il File Manager del tuo hosting) e includerli nella cartella /languages
del tuo plugin quando lo distribuisci (es. nello ZIP che caricherai su WordPress.org).
(Dopo aver recuperato i file, puoi anche disattivare Loco Translate dal tuo sito di test).
7. Controllo di Conformità con “Plugin Check”
Prima di pensare alla pubblicazione su WordPress.org, è fondamentale controllare che il tuo plugin rispetti gli standard.
- Installa e Attiva: Aggiungi il plugin Plugin Check al tuo sito di test.
- Vai su Strumenti > Plugin Check.
- Seleziona il tuo plugin (“OperWEB Maintenance Mode”) dal menu a tendina.
- Clicca “Check it!”.
- Il plugin analizzerà il codice e riporterà eventuali Errori (Errors) e Avvisi (Warnings).
- Errori: Vanno corretti obbligatoriamente (es. problemi di sicurezza, funzioni deprecate, output non “escapato”).
- Avvisi: È fortemente consigliato correggerli (es. standard di codice, commenti mancanti per i traduttori).
Abbiamo visto durante lo sviluppo che questo strumento è molto pignolo. Correggi tutto ciò che riporta, seguendo i link “Approfondisci” che fornisce per capire il problema. Riesegui il check finché non ci sono più errori critici.
Prossimi Passi: Verso la Pubblicazione
Con un plugin funzionante, traducibile e controllato, sei pronto per gli ultimi passi prima della distribuzione:
- Creare un
readme.txt
: Questo file (in un formato specifico, non Markdown) è la “vetrina” del tuo plugin su WordPress.org. Deve essere in inglese e descrivere il plugin, l’installazione, le FAQ, ecc. Leggi le linee guida qui. - Preparare lo ZIP: Assicurati che la cartella del tuo plugin contenga tutti i file necessari (PHP, JS, CSS, assets, la cartella
languages
con i file.pot
,.po
,.mo
, e ilreadme.txt
). Crea un file.zip
di questa cartella. - Inviare per la Revisione: Carica il tuo
.zip
tramite la pagina Add Your Plugin su WordPress.org e attendi la revisione manuale.
Conclusione
Creare un plugin per WordPress, anche semplice, tocca molti aspetti dello sviluppo: PHP, API di WordPress, sicurezza, internazionalizzazione. Seguendo questi passaggi e usando strumenti come Loco Translate e Plugin Check, puoi trasformare la tua idea in un plugin robusto e pronto per essere condiviso con la community. Buon coding!