Come creare un utente admin WordPress da wp-config.php: guida aggiornata e sicura

Sei bloccato fuori da wp-admin? Scopri come creare un admin WordPress temporaneo da wp-config.php, da FTP o da functions.php, in modo sicuro e compatibile con WordPress 6.8+.

Ciao! In questo articolo ti spiego come creare un utente amministratore WordPress intervenendo direttamente su wp-config.php, per quei momenti in cui hai accesso ai file del sito ma non riesci più ad entrare in wp-admin.

Partiamo dal problema che probabilmente ti ha portato qui: un cliente che ha perso le credenziali, un progetto ereditato senza documentazione, oppure un attacco che ha alterato gli utenti nel database. Situazioni che, se fai il mio lavoro, prima o poi capitano a tutti.

Ptsss… hai già capito la teoria e vuoi solo il codice? Vai direttamente al metodo passo per passo.

Perché NON ti consiglio più la query SQL con MD5

Prima di darti la soluzione voglio spiegarti perché molte guide che trovi online, incluse alcune che ho scritto io stesso tempo fa, oggi vanno usate con cautela.

Il consiglio classico è: apri phpMyAdmin, vai sulla tabella wp_users e inserisci una riga a mano con la password cifrata in MD5(). Fino a WordPress 6.7 funzionava, perché WordPress usava un algoritmo chiamato phpass, che accettava anche l’MD5 come primo passaggio interno.

Da WordPress 6.8, però, il core è passato a bcrypt come sistema di hashing predefinito. Le funzioni wp_hash_password() e wp_check_password() ora si appoggiano alle funzioni native di PHP password_hash() e password_verify(). Risultato pratico: un hash MD5 scritto a mano nel database non viene più riconosciuto, e il login fallisce anche se hai copiato tutto correttamente.

La soluzione più solida non è cercare di replicare a mano l’algoritmo giusto (che potrebbe cambiare ancora in futuro), ma lasciare che sia WordPress stesso a generare l’utente, con le sue funzioni interne. Ed è proprio qui che torna utile wp-config.php.

Che cos’è wp-config.php e perché funziona per questo scopo

Se hai già letto il mio articolo sui temi Child sai quanto mi piace partire dalle basi, quindi due parole veloci anche qui.

wp-config.php è il file di configurazione principale di WordPress: si trova nella cartella radice dell’installazione e contiene le credenziali del database, le chiavi di sicurezza e altre costanti fondamentali. È uno dei primissimi file che WordPress carica all’avvio, prima ancora di temi e plugin.

Proprio per questa posizione “privilegiata” nel caricamento, è un punto di intervento perfetto in situazioni di emergenza: anche se un plugin è corrotto o il pannello admin è irraggiungibile, wp-config.php resta comunque accessibile, perché WordPress lo legge prima che qualsiasi altra parte del sito possa andare in errore.

Quando ha senso usare questo metodo:

  • Hai perso l’accesso a wp-admin (password dimenticata, utente admin cancellato, sito compromesso) ma hai ancora accesso FTP/SSH ai file
  • Non hai voglia, o non hai la possibilità, di usare phpMyAdmin o un client MySQL diretto
  • Vuoi un metodo affidabile a prescindere dalla versione di WordPress installata, senza doverti preoccupare di quale algoritmo di hashing sta usando l’hosting in quel momento

Quando invece non è la strada giusta:

  • Se hai già un altro utente amministratore attivo: usa semplicemente Utenti → Aggiungi nuovo dal pannello, è più diretto
  • Se hai WP-CLI a disposizione: il comando wp user create fa la stessa identica cosa in una riga sola, senza toccare file di configurazione
  • Se il sito è in produzione con molto traffico: fai sempre un backup completo prima, qualsiasi intervento manuale sui file va fatto con un margine di sicurezza

Come si crea l’utente admin (passo per passo)

Passaggio 1: fai un backup

Prima di modificare qualsiasi file di sistema, scarica una copia di wp-config.php così com’è. Se qualcosa va storto, lo ripristini in pochi secondi ed è come se non fosse successo nulla.

Passaggio 2: individua il punto giusto nel file

Apri wp-config.php via FTP, SSH o File Manager dell’hosting. Cerca questa riga, che di norma trovi verso la fine del file:

require_once ABSPATH . 'wp-settings.php';

Un dettaglio tecnico importante: questo è il punto in cui WordPress carica tutto il proprio “motore” (funzioni, hook, classi). Il codice che stai per aggiungere deve girare dopo questa riga, non prima: solo a quel punto funzioni come wp_create_user() sono disponibili. Se lo inserisci prima, WordPress ti restituirà un errore “Call to undefined function” e il sito potrebbe non caricarsi.

Passaggio 3: incolla lo snippet

Subito dopo la riga require_once ABSPATH . 'wp-settings.php';, incolla questo blocco:

// --- SNIPPET TEMPORANEO: crea utente admin ---
add_action( 'init', function () {
    $username = 'nuovo_admin';
    $password = 'UnaPasswordMoltoSicura!23';
    $email    = 'tuamail@esempio.it';

    if ( ! username_exists( $username ) && ! email_exists( $email ) ) {
        $user_id = wp_create_user( $username, $password, $email );

        if ( ! is_wp_error( $user_id ) ) {
            $user = new WP_User( $user_id );
            $user->set_role( 'administrator' );
        }
    }
} );
// --- FINE SNIPPET ---

Sostituisci $username, $password e $email con valori tuoi, univoci sul sito. Scegli una password lunga e complessa: la userai una volta sola per entrare, e la cambierai comunque dal pannello subito dopo.

Passaggio 4: verifica che funzioni

Salva il file e prova ad accedere a /wp-admin con le credenziali che hai appena impostato. wp_create_user() si occupa da sola di generare l’hash corretto per la versione di WordPress in uso, che stia ancora usando phpass o già bcrypt: non è un problema tuo, ci pensa WordPress.

Passaggio 5: rimuovi l’admin temporaneo

Questo è il passaggio che quasi tutti si dimenticano, e secondo me il più importante di tutti. L’utente che hai appena creato va trattato come un admin temporaneo: appena hai verificato l’accesso, torna in wp-config.php e cancella il blocco di codice appena aggiunto.

Lasciarlo attivo non è un rischio enorme, grazie al controllo username_exists() che evita di ricreare l’utente ad ogni caricamento, ma resta comunque codice superfluo con una password in chiaro dentro un file di sistema. Non ha motivo di restare lì una volta fatto il suo lavoro.

Gli altri metodi che puoi usare (e perché spesso preferisco questo)

Cercando online trovi diverse varianti dello stesso identico problema: chi parla di creare l’admin da FTP (nel senso di accesso ai file, non un vero protocollo di autenticazione), chi di crearlo direttamente dal database, chi ancora da functions.php. Sono in sostanza le stesse strade che ti ho già anticipato, quindi le riassumo qui in un unico confronto.

Metodo Quando usarlo Attenzione
wp-config.php + wp_create_user() Hai accesso ai file ma non a wp-admin, niente WP-CLI Ricordati di rimuovere lo snippet dopo l’uso
WP-CLI (wp user create nuovo_admin email@dominio.it --role=administrator) Hai accesso SSH e WP-CLI installato Il metodo più pulito in assoluto, se disponibile
phpMyAdmin / SQL diretto (dal database) Hai solo accesso al database, non ai file Da WordPress 6.8 un MD5 scritto a mano non basta più, serve un hash bcrypt compatibile
Snippet in functions.php Hai accesso al tema attivo Stesso principio del wp-config.php, ma più esposto se il tema viene aggiornato o sostituito

Se hai la possibilità di scegliere, WP-CLI resta secondo me il metodo migliore: wp user create gestisce tutto senza che tu debba toccare nessun file. Il metodo via wp-config.php è quello che consiglio quando WP-CLI non c’è, ma hai comunque le chiavi dei file in mano.

Problemi comuni e come risolverli

“Call to undefined function add_action()”
Il codice è finito prima della riga require_once ABSPATH . 'wp-settings.php';, invece che dopo. Spostalo più in basso nel file e riprova.

L’utente non compare dopo aver salvato
Controlla di aver effettivamente visitato una pagina del sito dopo il salvataggio: l’hook init si attiva al primo caricamento successivo, non nel momento in cui salvi il file. Ricarica la home o /wp-admin per farlo scattare.

“Username già esistente” ma non riesci comunque ad accedere
Vuol dire che l’utente c’è già nel database ma probabilmente non ha il ruolo di amministratore, oppure la password è diversa da quella che stai provando. In questo caso ti conviene resettare ruolo e password di quell’utente invece di crearne uno nuovo, sempre con lo stesso approccio (usa get_user_by() e wp_set_password() al posto di wp_create_user()).

Il sito va in errore 500 dopo la modifica
Controlla la sintassi PHP: una parentesi o un punto e virgola fuori posto in wp-config.php manda giù l’intero sito. Ripristina il backup del Passaggio 1 e riprova con più calma.

Domande frequenti

Posso lasciare questo codice in wp-config.php per sempre?
Meglio di no. Anche con il controllo username_exists(), resta codice superfluo con una password in chiaro dentro un file di sistema, eseguito ad ogni richiesta. Toglilo appena hai verificato l’accesso.

Funziona su qualsiasi hosting?
Sì, perché non dipende dal pannello di controllo dell’hosting: ti basta un accesso ai file (FTP, SFTP, SSH o File Manager) e un editor di testo.

È più sicuro di un intervento diretto sul database?
Sì, per due motivi. Primo: non devi generare a mano l’hash della password, con tutti i rischi di incompatibilità che questo comporta sulle versioni recenti di WordPress. Secondo: wp_create_user() applica in automatico tutte le validazioni interne di WordPress, email compresa.

E se dimentico di togliere lo snippet?
In pratica, grazie a username_exists(), non ricrea l’utente ogni volta — ma resta comunque una porta che non ha motivo di restare aperta. Trattalo come un intervento temporaneo, non come una configurazione da lasciare lì.

Per chiudere

Se sei arrivato/a fin qui: modificare wp-config.php per creare un utente amministratore è una soluzione pratica quando ti manca l’accesso al pannello ma hai comunque le chiavi dei file. A differenza delle vecchie guide con query SQL e MD5, che da WordPress 6.8 non garantiscono più un login funzionante, usare wp_create_user() ti mette al riparo da questi problemi di compatibilità, perché lasci che sia WordPress stesso a occuparsi dell’hashing.

Un ultimo consiglio, che vale anche al di là di questo articolo: tieni sempre aggiornati WordPress, PHP e i plugin che usi. Buona parte delle situazioni in cui serve questo tipo di intervento nasce proprio da ambienti lasciati indietro troppo a lungo.

Se hai dei dubbi o vuoi il mio supporto per mettere in sicurezza il tuo sito WordPress, scrivimi una mail e ti risponderò il prima possibile.

Qui sotto trovi dei link per approfondire gli argomenti trattati in questo articolo:

Commenti
Unisciti alla discussione e condividi la tua opinione
Scrivi un commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *