Da Idea a Plugin WordPress: Creare una Modalità Manutenzione (con Traduzione!)
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 del plugin OperWEB Maintenance Mode per i clienti del mio brand OperWEB.
Il plugin è disponibile su GitHub — e nel frattempo è stato aggiornato con auto-aggiornamento integrato direttamente dalla bacheca WordPress: 👉 github.com/fabrizioortis/operweb-maintenance-mode
Cosa creeremo
Un plugin “OperWEB Maintenance Mode” 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 wp-content/plugins/, crea una cartella chiamata operweb-maintenance-mode.
Crea il file principale: dentro questa cartella, crea operweb-maintenance-mode.php.
L’intestazione (Header): apri il file e inserisci l’header 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;
}
Plugin Name,Description,Author, ecc.: 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 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' );
// 1. Manutenzione attiva dalle impostazioni?
if ( empty( $options['enable'] ) || $options['enable'] != 1 ) {
return;
}
// 2. L'utente è un admin?
if ( current_user_can( 'manage_options' ) ) {
return;
}
// 3. Per tutti gli altri: mostra la pagina di manutenzione
$maintenance_file = plugin_dir_path( __FILE__ ) . 'maintenance.php';
if ( file_exists( $maintenance_file ) ) {
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
}
include( $maintenance_file );
die();
}
}
add_action( 'template_redirect', 'owm_maintenance_mode_check' );
L’header 503 Service Unavailable è importante per la SEO: dice ai motori di ricerca che il sito è temporaneamente non disponibile. Avremo bisogno anche di un file maintenance.php nella stessa cartella, che conterrà l’HTML e il CSS della pagina.
3. Creare una Pagina di Impostazioni (Settings API)
Per permettere all’utente di configurare il plugin, usiamo la Settings API di WordPress.
- Aggiungere la pagina: con
add_options_page()aggiungiamo 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: con
add_settings_section()eadd_settings_field()definiamo 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 consettings_fields()edo_settings_sections().
Per campi avanzati come l’uploader media e il color picker, dobbiamo accodare gli script e gli stili necessari con 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, ogni stringa visibile all’utente deve essere “avvolta” in una funzione di traduzione:
__( 'Stringa', 'text-domain' )— restituisce la stringa tradotta._e( 'Stringa', 'text-domain' )— stampa direttamente la stringa tradotta.esc_html__(),esc_attr__(),esc_html_e(),esc_attr_e()— come sopra, ma con escape automatico per la sicurezza.printf()/sprintf()— per stringhe con variabili, accompagnate da commenti/* translators: ... */.
Esempio pratico:
// Prima:
echo '<h1>Sito in Manutenzione</h1>';
// Dopo:
echo '<h1>' . esc_html__( 'Sito in Manutenzione', 'operweb-maintenance-mode' ) . '</h1>';
5. Tradurre con Loco Translate
Con il codice pronto, usiamo Loco Translate per creare i file di lingua.
Installa e attiva il plugin Loco Translate sul tuo sito di test, poi vai su Loco Translate > Plugins e trova “OperWEB Maintenance Mode”.
Crea il modello .pot: clicca “Crea modello” e salvalo in languages/operweb-maintenance-mode.pot. Questo file contiene l’elenco di tutte le stringhe originali.
Crea la traduzione Italiana (it_IT):
- Clicca “Nuova lingua” e scegli “Italiano (Italia)”.
- Importante: scegli la posizione “File dell’autore” (salverà in
wp-content/plugins/operweb-maintenance-mode/languages/). - Traduci ogni stringa e clicca “Salva”. Verranno creati
it_IT.po(modificabile) eit_IT.mo(compilato).
Crea la traduzione Inglese (en_US): stesso procedimento, scegliendo “Inglese (Stati Uniti)“.
6. Recuperare i File di Traduzione
I file .pot, .po e .mo vengono creati da Loco Translate direttamente nella cartella /wp-content/plugins/operweb-maintenance-mode/languages/.
Se non hai lavorato in locale, scaricali via FTP/SFTP o dal File Manager del tuo hosting e includili nella cartella /languages prima di distribuire il plugin.
7. Controllo di Conformità con “Plugin Check”
Prima di pubblicare su WordPress.org, è fondamentale verificare che il plugin rispetti gli standard.
Installa e attiva Plugin Check, poi vai su Strumenti > Plugin Check, seleziona il tuo plugin e clicca “Check it!”.
Il plugin riporterà:
- Errori: vanno corretti obbligatoriamente (problemi di sicurezza, funzioni deprecate, output non escapato).
- Avvisi: fortemente consigliato correggerli (standard di codice, commenti mancanti per i traduttori).
Correggi tutto ciò che riporta, seguendo i link “Approfondisci” 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, rimangono tre passi:
- Creare un
readme.txt: è la “vetrina” del plugin su WordPress.org. Deve essere in inglese e descrivere il plugin, l’installazione, le FAQ, ecc. (leggi le linee guida). - Preparare lo ZIP: la cartella deve contenere tutti i file (PHP, JS, CSS, assets, cartella
languagescon.pot/.po/.mo, ereadme.txt). - Inviare per la revisione: carica il
.ziptramite la pagina Add Your Plugin su WordPress.org e attendi la revisione manuale.
Il Plugin su GitHub
Il codice completo è disponibile su GitHub. Nel frattempo il plugin è stato aggiornato e include ora un sistema di auto-aggiornamento direttamente dalla bacheca di WordPress — senza bisogno di passare per WordPress.org:
👉 github.com/fabrizioortis/operweb-maintenance-mode
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.