Il file wp-config.php è il vero centro di controllo di WordPress. Si trova nella cartella principale (root) dell’installazione e definisce le credenziali del database, le chiavi di crittografia e le direttive che regolano il comportamento dell’intero CMS. Modificare questo file significa agire direttamente sul motore del sito, scavalcando l’interfaccia grafica.
Tutte le direttive descritte in questa guida vanno inserite all’interno del file, subito prima della riga standard:
PHP
/* That's all, stop editing! Happy publishing. */
Regola d’oro: la copia di sicurezza
Prima di aprire l’editor e modificare il codice, crea una copia di backup. Se ti stai collegando tramite riga di comando sul tuo server, incolla questo comando per generare una copia salvata con la data di oggi:
Bash
cp wp-config.php wp-config.php.bak-$(date +%F)
In caso di sintassi errata o schermo bianco, potrai ripristinare il file originale in un secondo eliminando la nuova versione e rinominando il backup.
1. Gestione della memoria e ottimizzazione delle risorse
Quando WordPress incontra errori del tipo “Fatal error: Allowed memory size exhausted“, la causa è un limite di memoria troppo basso impostato per l’esecuzione degli script PHP.
PHP
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
WP_MEMORY_LIMIT definisce il tetto di RAM assegnato ai processi del frontend (le pagine viste dai visitatori). WP_MAX_MEMORY_LIMIT alza la soglia per l’area di amministrazione e per le operazioni di background particolarmente onerose, come l’elaborazione di immagini ad alta risoluzione o la generazione di backup.
Nota pratico-operativa: Queste istruzioni indicano a WordPress quanta memoria richiedere, ma non possono superare il valore massimo (memory_limit) impostato a livello del file php.ini del server.
Controllo delle revisioni e salvataggi automatici
Per impostazione predefinita, WordPress salva ogni singola modifica apportata a pagine e articoli. Con il passare del tempo, questo comportamento gonfia il database di migliaia di righe inutili.
Leggi anche: Ottimizzare database WordPress: pulizia sicura
PHP
define( 'WP_POST_REVISIONS', 5 );
define( 'AUTOSAVE_INTERVAL', 120 );
define( 'EMPTY_TRASH_DAYS', 7 );
- Revisioni: Inserendo
5, mantieni solo le ultime 5 versioni di ciascun contenuto, eliminando lo storico più vecchio. Impostando il valore sufalse, disattivi del tutto il tracciamento delle modifiche. - Salvataggio automatico: Aumenta l’intervallo di salvataggio durante la scrittura nell’editor a 120 secondi (il valore di default è 60), riducendo le richieste inviate al server mentre lavori.
- Gestione cestino: I contenuti eliminati rimangono nel cestino per 7 giorni prima di sparire. Impostando il valore a
0, disabiliti la cartella e l’eliminazione diventerà immediata e irreversibile.
2. Diagnostica e isolamento degli errori (Debug)
Vedere una schermata bianca senza alcun messaggio d’errore è una delle situazioni più sgradevoli nell’amministrazione di un sito web. Il sistema di debug integrato permette di tracciare i problemi senza mostrare stringhe di codice agli utenti.
PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Questo blocco attiva il tracciamento interno e scrive tutti i warning o i fatal error all’interno del file /wp-content/debug.log. L’istruzione WP_DEBUG_DISPLAY impostata su false garantisce che nessun messaggio di errore appaia sul sito pubblico, proteggendo la struttura del server da occhi indiscreti.
Strumenti per sviluppatori e analisi query
PHP
define( 'SCRIPT_DEBUG', true );
define( 'SAVEQUERIES', true );
- SCRIPT_DEBUG: Costringe WordPress a caricare le versioni estese (non minificate) dei file JavaScript e CSS di sistema. Utile se stai risolvendo conflitti con gli script di un plugin.
- SAVEQUERIES: Salva in un array tutte le query SQL eseguite sul database durante il caricamento della pagina, indicando il tempo impiegato e la funzione che le ha generate. Aumenta il carico di lavoro sul server: usalo solo in ambienti di test o per brevi sessioni di diagnosi.
3. Rinforzare le difese e la sicurezza del server
L’area di amministrazione di WordPress è il bersaglio primario degli attacchi di tipo brute force o di injection. Alcune istruzioni nel file di configurazione permettono di chiudere le porte d’accesso più critiche.
PHP
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
define( 'FORCE_SSL_ADMIN', true );
- Blocco editor interno (
DISALLOW_FILE_EDIT): Rimuove la possibilità di modificare il codice di temi e plugin direttamente dalla dashboard. Se un malintenzionato dovesse ottenere un account amministratore, questa stringa gli impedirà di iniettare codice malevolo tramite l’editor integrato. - Blocco modifiche complete (
DISALLOW_FILE_MODS): Va oltre la precedente: impedisce del tutto l’installazione, la disinstallazione e l’aggiornamento di plugin, temi e core da pannello. In questo scenario, gli aggiornamenti dovranno avvenire via FTP, SFTP o riga di comando (wp-cli). - SSL Obbligatorio (
FORCE_SSL_ADMIN): Forza l’uso del protocollo sicuro HTTPS su tutte le sessioni di login e all’interno della dashboard, cifrando le credenziali inviate tramite browser.
Gestione del ripristino del database
PHP
define( 'WP_ALLOW_REPAIR', false );
In caso di tabelle corrotte, impostando questa voce su true si abilita la funzionalità automatica raggiungibile all’indirizzo [https://www.tuosito.it/wp-admin/maint/repair.php](https://www.tuosito.it/wp-admin/maint/repair.php).
Attenzione: Questa pagina è accessibile da chiunque senza bisogno di autenticarsi. Mantieni la stringa su false o rimuovila del tutto; inseriscila solo all’occorrenza e cancellala immediatamente dopo aver terminato la riparazione.
Chiavi di sicurezza (SALT) e prefisso tabelle
PHP
define( 'AUTH_KEY', 'incolla-qui-la-stringa-generata' );
define( 'SECURE_AUTH_KEY', 'incolla-qui-la-stringa-generata' );
define( 'LOGGED_IN_KEY', 'incolla-qui-la-stringa-generata' );
define( 'NONCE_KEY', 'incolla-qui-la-stringa-generata' );
define( 'AUTH_SALT', 'incolla-qui-la-stringa-generata' );
define( 'SECURE_AUTH_SALT', 'incolla-qui-la-stringa-generata' );
define( 'LOGGED_IN_SALT', 'incolla-qui-la-stringa-generata' );
define( 'NONCE_SALT', 'incolla-qui-la-stringa-generata' );
Le chiavi SALT servono a cifrare le informazioni salvate nei cookie degli utenti. Puoi generarne di nuove e casuali tramite il servizio ufficiale di WordPress
. Inserire una nuova serie di chiavi invaliderà automaticamente le sessioni di tutti gli utenti collegati, costringendoli a rieseguire il login: un’operazione indispensabile se sospetti una compromissione delle credenziali.
PHP
$table_prefix = 'wp_xyz9_';
Sostituire il prefisso predefinito delle tabelle (wp_) con una combinazione casuale limita l’efficacia degli attacchi orientati alle SQL Injection. Questa modifica va impostata durante la primissima installazione del sito. Farlo a sito già avviato richiede la rinominazione manuale delle tabelle da phpMyAdmin o WP-CLI e la modifica di alcune chiavi all’interno della tabella options.
4. Controllo degli aggiornamenti automatici
Gli aggiornamenti automatici mantengono il sito al sicuro, ma in alcune architetture complesse potrebbero creare problemi di compatibilità imprevisti.
PHP
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
define( 'AUTOMATIC_UPDATER_DISABLED', true );
Per l’aggiornamento del core del CMS (WP_AUTO_UPDATE_CORE), puoi scegliere tra tre valori:
'minor': applica solo le patch di sicurezza e manutenzione (es. da 6.5.1 a 6.5.2). È la scelta raccomandata per bilanciare stabilità e sicurezza.true: applica automaticamente anche i salti di versione principali (es. da 6.4 a 6.5).false: blocca qualsiasi aggiornamento del motore di WordPress.
L’istruzione AUTOMATIC_UPDATER_DISABLED impostata su true disattiva invece il motore di aggiornamento automatico per qualsiasi componente, inclusi file di lingua e traduzioni.
Per abilitare l’aggiornamento automatico di plugin e temi non si usano costanti in wp-config.php, ma appositi filtri da aggiungere al file functions.php o all’interno di un plugin dedicato:
PHP
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
5. Override degli indirizzi URL del sito
Se cambi dominio o trasferisci l’installazione su un nuovo server senza aver aggiornato il database, l’accesso al pannello di controllo potrebbe risultare bloccato a causa dei reindirizzamenti al vecchio indirizzo.
PHP
define( 'WP_HOME', 'https://www.tuosito.it' );
define( 'WP_SITEURL', 'https://www.tuosito.it' );
Inserendo queste due righe, imponi a WordPress gli URL corretti, ignorando le impostazioni salvate nella tabella wp_options. WP_HOME rappresenta l’indirizzo visibile dai visitatori, mentre WP_SITEURL individua il percorso in cui risiedono fisicamente i file del core di WordPress.
6. Sostituzione del WP-Cron con un Cron job di sistema
Il meccanismo nativo di pianificazione delle attività di WordPress (WP-Cron) non funziona come un demone di sistema continuo. Si attiva soltanto quando un utente visita una pagina del sito. Sui siti con pochissimo traffico i compiti programmati saltano; su quelli ad altissimo traffico, invece, ogni singola richiesta genera overhead inutile.
Per prima cosa, disattiva l’esecuzione automatica ad ogni visita inserendo questo comando nel file di configurazione:
PHP
define( 'DISABLE_WP_CRON', true );
Fatto questo, devi impostare un’esecuzione programmata direttamente dal crontab del server. Apri la configurazione degli interventi dal terminale:
Bash
crontab -e
Aggiungi la seguente istruzione per lanciare lo script ogni 5 minuti:
Bash
*/5 * * * * cd /percorso/del/tuo/sito && php wp-cron.php > /dev/null 2>&1
Se il server utilizza l’architettura OpenLiteSpeed, è consigliabile specificare direttamente il binario PHP ottimizzato (LSPHP), ad esempio:
Leggi anche: Aggiornare tutti i pacchetti PHP (lsphp) su OpenLiteSpeed: Guida a Snapshot e Rollback Senza Rischi
Bash
*/5 * * * * cd /percorso/del/tuo/sito && /usr/local/lsws/lsphp83/bin/php wp-cron.php > /dev/null 2>&1
7. Abilitazione del sistema di Cache
PHP
define( 'WP_CACHE', true );
Questa istruzione indica a WordPress di caricare lo script wp-content/advanced-cache.php. È la direttiva base utilizzata dai più diffusi plugin di ottimizzazione (come LiteSpeed Cache o WP Rocket). Se la costanti non è impostata su true, la cache di pagina del plugin potrebbe non avviarsi correttamente.
8. Definizione dell’ambiente di lavoro
PHP
define( 'WP_ENVIRONMENT_TYPE', 'production' );
Permette di indicare al sistema in quale ambiente sta girando l’applicazione. I valori ammessi sono:
localdevelopmentstagingproduction
Plugin e temi possono interrogare questo valore tramite la funzione nativa wp_get_environment_type() e disattivare o attivare funzionalità specifiche (ad esempio disabilitare gli invii di email di test o mostrare banner di avviso quando ci si trova in staging).
9. Struttura dei file e comportamento dei media
PHP
define( 'FS_METHOD', 'direct' );
define( 'IMAGE_EDIT_OVERWRITE', true );
- Modalità File System (
FS_METHOD): L’opzione'direct'forza WordPress a scrivere i file aggiornati sul disco senza richiedere le credenziali FTP. Funziona senza rischi solo se l’utente del processo web (es.www-dataonobody) coincide con il proprietario della cartella dei file. - Gestione modifiche immagini (
IMAGE_EDIT_OVERWRITE): Quando ridimensioni o ritagli un’immagine tramite il media library di WordPress, il sistema conserva il file originale creando nuove copie. Impostando il valore sutrue, le modifiche successive sovrascriveranno l’immagine elaborata in precedenza, evitando il consumo eccessivo di spazio sul disco.
Personalizzazione del percorso della cartella contenuti
È possibile cambiare il nome o la posizione della cartella wp-content per nascondere parzialmente la struttura predefinita del CMS:
PHP
define( 'WP_CONTENT_DIR', dirname( __FILE__ ) . '/risorse' );
define( 'WP_CONTENT_URL', 'https://www.tuosito.it/risorse' );
Nota: Molti plugin non utilizzano le API ufficiali di WordPress per ricavare i percorsi e danno per scontata l’esistenza della cartella wp-content. Applica questa modifica solo se stai sviluppando un’architettura custom e hai testato tutti gli add-on in uso.
10. Attivazione della modalità Multisite
Se vuoi gestire più siti web da una singola installazione di WordPress, abilita l’interfaccia di creazione della rete con questa singola riga:
PHP
define( 'WP_ALLOW_MULTISITE', true );
Dopo aver salvato il file e ricaricato la pagina di amministrazione, troverai la nuova opzione sotto il menu Strumenti > Configurazione rete. Una volta completati i passaggi guidati della procedura, WordPress genererà un secondo blocco di costanti personalizzate che dovrai incollare nuovamente all’interno di wp-config.php.
Mantenimento del file e sicurezza dell’ambiente
Dopo aver completato le modifiche e verificato che il sito continui a funzionare senza interruzioni, proteggi il file da accessi indesiderati sul server.
Imposta i permessi corretti: Imposta permessi di lettura stringenti tramite riga di comando per evitare che altri utenti del server possano leggere i dati del database:
Bash
chmod 600 wp-config.php
(Usa 640 se il processo web appartiene a un gruppo separato).
Spostamento del file: WordPress possiede una logica nativa di ripiego: se non trova wp-config.php nella cartella principale del sito, risale automaticamente di un livello nella directory superiore. Se la struttura del tuo server lo consente, puoi spostare il file sopra la cartella pubblica (public_html o www), rendendolo del tutto inaccessibile via web.
Altro per te
Hosting e ServerVulnerabilità PHP e Server Web: Come Aggiornare OpenLiteSpeed su VPS Ubuntu
Le vulnerabilità di sicurezza scoperte di recente in PHP hanno messo in allarme gli amministratori di sistema di tutto il mondo. Quando emerge una…
Come risolvere l’errore cURL 28 in WordPress con uno script nel functions.php
PHP, aggiornamento di sicurezza critico: cosa fare su aaPanel e sul proprio server
Come aumentare i limiti di PHP su WordPress: Di quanto e perchè
Come installare PHP 8.4 su Ubuntu con tutte le dipendenze ed estensioni
Qual’è la versione PHP migliore per WordPress? Comparazione (PHP 7.4, 8.1, 8.2, 8.3, 8.4)
PHP 8.4 non si installa su aaPanel mancano le estensioni – Risolto!
Conviene passare a PHP 8.4 con WordPress? È sicuro aggiornare a PHP 8.4?
Altri articoli su PHP
- Plugin WordPress vulnerabili o abbandonati: come riconoscerli ed eliminarli prima che bucano il sito27 Ott
- Aggiornamenti automatici di sicurezza su Ubuntu: come configurare unattended-upgrades su un VPS27 Ott
- PHP2Shell: come limitare i danni di una falla PHP con disable_functions e blocco dei file in uploads27 Ott
- Vulnerabilità PHP e Server Web: Come Aggiornare OpenLiteSpeed su VPS Ubuntu27 Ott
- PHP2Shell: la doppia falla che fa tremare milioni di siti web (WordPress compreso)27 Ott
- PHP, aggiornamento di sicurezza critico: cosa fare su aaPanel e sul proprio server25 Ott
