Qualche tempo fa una cliente non riusciva più a entrare nel suo sito WordPress. La password era persa e il recupero non funzionava: l’email collegata all’account non esisteva più. Nessun problema, le ho detto: dammi l’accesso al database, si sistema in un minuto.
Il database però stava su un server separato, raggiungibile solo da alcuni indirizzi IP, e il vecchio fornitore non voleva saperne di dare l’accesso. Sembrava un vicolo cieco. Non lo era: avevamo l’accesso FTP, e tanto basta.
“Ma con l’FTP hai anche la password del database”
Vero: è scritta nel file wp-config.php. Ma la password non serve a niente se il database non ti lascia collegare. Quello della cliente accettava connessioni solo dai server del vecchio fornitore: da phpMyAdmin o dal mio computer la connessione veniva rifiutata prima ancora di controllare la password. Succede spesso anche sugli hosting condivisi, dove il database non è raggiungibile dall’esterno.
L’unico modo per arrivarci era far girare del codice sul server del sito, che il database accettava. Ed è esattamente quello che fa il file qui sotto: usa la connessione che WordPress ha già aperto, senza bisogno di conoscere la password.
L’idea
WordPress crea gli utenti con una sua funzione, wp_create_user(), la stessa che usa il pannello quando aggiungi un utente a mano. Se puoi mettere un file PHP nel sito, puoi chiamarla tu e crearti un amministratore nuovo. Da lì reimposti la password dell’account originale e cancelli tutto.
Come si fa
- Collegati al sito via FTP o dal file manager del pannello dell’hosting.
- Apri la cartella
wp-contente, se non c’è, crea dentro la cartellamu-plugins. - Crea al suo interno il file
accesso-temporaneo.phpcon questo contenuto, cambiando nome utente, password ed email:
<?php
// Crea un amministratore temporaneo. CANCELLARE questo file appena entrati.
add_action( 'init', function () {
$utente = 'accesso-temporaneo';
$password = 'una-password-lunga-e-mai-usata-altrove';
$email = 'il-tuo-indirizzo@tuodominio.it';
if ( username_exists( $utente ) || email_exists( $email ) ) {
return;
}
$id = wp_create_user( $utente, $password, $email );
if ( ! is_wp_error( $id ) ) {
( new WP_User( $id ) )->set_role( 'administrator' );
}
} );
- Apri il sito una volta, così il codice viene eseguito, poi vai su
tuosito.it/wp-admined entra con i dati che hai scritto. - In Utenti, correggi l’email e reimposta la password dell’account originale.
- Cancella subito il file
accesso-temporaneo.php, poi entra con l’account originale ed elimina anche l’utente temporaneo.
Perché un mu-plugin e non il functions.php
Molte guide dicono di incollare il codice nel file functions.php del tema. Funziona, ma è più rischioso: un errore di battitura in quel file può bloccare tutto il sito, e il codice resta sepolto in mezzo a quello del tema, dove è facile dimenticarlo. I file in mu-plugins invece partono da soli, senza bisogno di attivarli, e stanno in un file tutto loro: toglierlo è un attimo, e si vede subito se è rimasto.
Due avvertenze
- Non lasciare il file sul server. Finché c’è, chiunque conosca quei dati può entrare nel sito da amministratore.
- Usalo solo su siti di cui sei proprietario, o per conto del proprietario. Poter scrivere nei file di un sito vuol dire poterne prendere il controllo, ed è anche il motivo per cui l’accesso FTP va custodito come la password del pannello.
Se hai invece l’accesso al database, da phpMyAdmin basta correggere l’email dell’utente nella tabella wp_users e usare il normale “Password dimenticata”. E se hai l’accesso SSH, con WP-CLI è un comando solo: wp user update nomeutente --user_pass=nuovapassword.