
🚀 Accesso automatico a WordPress in PHP: snippet per accesso demo
L'accesso demo al pannello di amministrazione di WordPress è un approccio standard per vendere plugin e temi. Un potenziale acquirente visita il sito, vede login e password, li copia, va su wp-login.php, li incolla... Troppi passaggi. Ogni clic in più filtra una parte del pubblico.
Il login automatico tramite link risolve questo problema alla radice: un link e l'utente è già nel pannello di amministrazione, con l'account richiesto. Niente copia-incolla, niente confusione con le credenziali.
Ecco uno snippet PHP già pronto che aggiunge questo meccanismo a qualsiasi sito WordPress. Venti righe di codice, personalizzazione in 2 minuti. Lo snippet non dipende dal tema, non richiama dipendenze esterne e si attiva come un normale plugin.
💡 Panoramica rapida:
- Aggiungi un parametro URL all'indirizzo di login (ad esempio
?autologin=demo) ewp_signon()autorizza l'utente con l'account specificato reindirizzandolo alla sezione desiderata - Lo snippet è strutturato come un plugin WordPress separato: lo attivi e funziona subito, lo disattivi e si disabilita, il tema non ne è vincolato
- La versione base gestisce un solo account, quella estesa supporta qualsiasi numero di account con ruoli e destinazioni diversi
- Personalizzazione per il tuo progetto: modifica tre valori nel codice (login, password, chiave URL), carica il plugin sul sito e ottieni il login tramite link
Come funziona l'auto-login: meccanica di wp_signon
Il cuore di tutta la struttura è la funzione wp_signon(). Accetta le credenziali: login, password e flag "remember", quindi autorizza l'utente esattamente come il modulo standard su wp-login.php. La differenza è che la chiamata avviene in modo programmatico, senza intervento umano. L'utente segue semplicemente il link e si ritrova dentro.
L'hook after_setup_theme viene eseguito prima che gli header vengano inviati, il che è critico perché wp_signon() imposta un cookie di autenticazione e i cookie devono essere inviati prima di qualsiasi output verso il browser. Se agganci la chiamata a init o a un hook successivo, il login potrebbe non funzionare. È proprio per questo che lo snippet è strutturato come plugin separato anziché essere inserito nel functions.php del tema: il plugin si carica nelle fasi iniziali del ciclo di vita di WordPress, garantendo che l'hook venga eseguito in tempo.

Ecco il plugin minimo funzionante:
1 <?php 2 /* 3 Plugin Name: Auto Login 4 Plugin URI: https://techblog.sdstudio.top/ 5 Version: 1.0.0 6 Author: Harri Bell-Thomas 7 */ 8 9 function autologin() { 10 if ( $_GET['autologin'] !== 'demo' ) { 11 return; 12 } 13 14 $creds = array( 15 'user_login' => 'demo', 16 'user_password' => 'demo', 17 'remember' => true, 18 ); 19 20 $user = wp_signon( $creds, false ); 21 22 if ( ! is_wp_error( $user ) ) { 23 wp_redirect( admin_url() ); 24 exit; 25 } 26 } 27 add_action( 'after_setup_theme', 'autologin' );
Analizziamolo riga per riga. La condizione $_GET['autologin'] === 'demo' verifica che sia stato passato il parametro richiesto nell'URL: wp-login.php?autologin=demo. L'array $creds contiene login, password e il flag "remember". wp_signon() con il parametro false significa: non usare cookie sicuri (adatto per sviluppo locale e siti di staging senza HTTPS). In caso di successo, wp_redirect( admin_url() ) reindirizza l'utente al pannello di amministrazione. In caso di errore (password errata, utente inesistente), WordPress mostra il modulo di login standard senza rivelare che c'è stato un tentativo di auto-login.
Personalizzazione per il tuo progetto
Per adattare lo snippet, è sufficiente modificare tre valori: il parametro URL, login e password. Nel blocco successivo sono spostati all'inizio della funzione per comodità:
1 function autologin() { 2 $param = 'autologin'; 3 $user = 'dummy'; 4 $pass = 'pa55word'; 5 6 if ( $_GET[ $param ] !== $user ) { 7 return; 8 } 9 10 $creds = array( 11 'user_login' => $user, 12 'user_password' => $pass, 13 'remember' => true, 14 ); 15 16 $login = wp_signon( $creds, false ); 17 18 if ( ! is_wp_error( $login ) ) { 19 wp_redirect( admin_url() ); 20 exit; 21 } 22 }
Tre regole in fase di personalizzazione che ti faranno risparmiare ore di debug.
Primo: il valore del parametro $user non deve coincidere con le chiavi riservate di WordPress. Quattro chiavi sono riservate: loggedout per il logout, action per il reset della password, redirect_to per i reindirizzamenti dopo il login e wp_lang per cambiare lingua. Se usi una di queste parole, l'auto-login non funzionerà o comprometterà il comportamento standard del core.
Secondo: la password è memorizzata in chiaro nel codice del plugin, quindi non usare mai questo snippet per account amministratore o editor su un sito live. Un utente demo con il ruolo Subscriber o, al massimo, Editor è accettabile. Un amministratore con auto-login tramite link è una falla che un malintenzionato troverebbe in un secondo.
Terzo: se il sito gira su HTTPS, sostituisci false con true nel secondo argomento di wp_signon(). Questo attiverà il cookie sicuro e impedirà l'intercettazione del token di autenticazione durante la trasmissione di rete.
L'indirizzo di login sarà simile a questo: https://your-site.com/wp-login.php?autologin=dummy. Seguendolo, l'utente arriva immediatamente nel pannello di amministrazione. Nessuna schermata intermedia, nessun copia-incolla di credenziali.
Multi-account: un link, account diversi
E se il sito demo mostrasse il prodotto da ruoli diversi? L'amministratore vede il pannello delle impostazioni, l'editor vede l'interfaccia di pubblicazione, il subscriber vede l'area personale. Per questo scenario, estendiamo lo snippet per supportare più account:
1 <?php 2 /* 3 Plugin Name: Auto Login 4 Plugin URI: https://techblog.sdstudio.top/ 5 Description: Automatic login for demo accounts. Configure accounts in the array below. 6 Version: 1.0.0 7 Author: Harri Bell-Thomas 8 */ 9 10 $autologin_param = 'autologin'; 11 12 $autologin_accounts = array( 13 array( 14 'user' => 'demo', 15 'pass' => 'demo', 16 'location' => 'wp-admin', 17 ), 18 array( 19 'user' => 'editor_demo', 20 'pass' => 'demo', 21 'location' => 'wp-admin/post-new.php', 22 ), 23 ); 24 25 function autologin() { 26 global $autologin_param, $autologin_accounts; 27 28 foreach ( $autologin_accounts as $account ) { 29 if ( $_GET[ $autologin_param ] === $account['user'] ) { 30 $creds = array( 31 'user_login' => $account['user'], 32 'user_password' => $account['pass'], 33 'remember' => true, 34 ); 35 36 $user = wp_signon( $creds, false ); 37 38 if ( ! is_wp_error( $user ) ) { 39 wp_redirect( admin_url( $account['location'] ) ); 40 exit; 41 } 42 } 43 } 44 } 45 add_action( 'after_setup_theme', 'autologin' );
La meccanica è la stessa, ma l'array $autologin_accounts memorizza le credenziali di tutti gli utenti demo e foreach li scorre cercando una corrispondenza in base al valore del parametro URL. Aggiungere un nuovo account si riduce a copiare il blocco dell'array con nuovi valori per user, pass e location.
Il parametro location accetta qualsiasi percorso relativo all'interno di /wp-admin/: ad esempio, options-general.php per la pagina delle impostazioni, edit.php per l'elenco degli articoli o post-new.php per creare un nuovo articolo. Puoi anche specificare un URL completo per reindirizzare al frontend, ma in tal caso sostituisci admin_url( $account['location'] ) con $account['location'] nel codice.
Il punto di ingresso è lo stesso: https://your-site.com/wp-login.php?autologin=editor_demo e l'utente atterra sulla pagina di creazione articoli anziché nella root dell'amministrazione. Per il proprietario del sito demo, questo significa pieno controllo sulla prima impressione: ogni tipo di utente vede esattamente la parte del prodotto rilevante per i propri interessi.
⁉️🤔 Domande frequenti
È sicuro memorizzare le password nel codice del plugin?
No, non è sicuro. Lo snippet è stato progettato per siti demo dove gli account sono intenzionalmente pubblici e non hanno privilegi reali. Su un sito di produzione con utenti reali, questo approccio è inaccettabile: la password in chiaro può trapelare durante qualsiasi audit del codice. Per scenari di produzione, valuta un meccanismo con token monouso o SSO via REST API con verifica nonce.
Perché non l'azione wp_login, ma direttamente wp_signon?
L'hook
wp_loginviene attivato dopo un login riuscito, non esegue l'autenticazione stessa.wp_signon()è la funzione che autentica l'utente: verifica la password tramitewp_authenticate(), imposta il cookie e attivawp_logincome conseguenza. Se devi autorizzare un utente solo in modo programmatico,wp_signonè lo strumento giusto.
Posso inserire lo snippet in functions.php invece che in un plugin separato?
Sì, il codice funzionerà anche nel
functions.phpdel tema. Ma un plugin è più comodo: l'auto-login non è legato al tema e non si romperà cambiando tema. Inoltre, il plugin può essere disattivato con un clic senza modificare file sul server.
Cosa fare se dopo il login l'utente non risulta autorizzato in is_user_logged_in?
Questa è una particolarità nota di
wp_signon()quando viene chiamato prima dell'hookinit: il cookie è impostato, ma il globale$current_usernon è ancora aggiornato. La soluzione è chiamare forzatamentewp_set_current_user( $user->ID )subito dopo unwp_signon()riuscito. Nel nostro snippet questo non è critico perché segue immediatamente un redirect, ma in scenari senza redirect la riga è obbligatoria.
Lo snippet funziona su multisite?
Sì, ma con una precisazione.
wp_signon()autorizza l'utente all'interno del sito corrente nella rete. Se l'account esiste solo su uno dei sottositi, l'auto-login non funzionerà sugli altri. Per l'autenticazione incrociata su tutta la rete, usa una combinazione diwp_signon()ewp_set_auth_cookie()con installazione forzata del cookie per il dominio principale.
Snippet di auto-login: in conclusione
Quindici righe di PHP eliminano il principale attrito nel funnel del sito demo: copiare login e password. Un link e il visitatore è dentro il prodotto, con il ruolo e nella sezione che hai scelto.
La versione base copre lo scenario "un utente demo", quella estesa un numero qualsiasi di ruoli con diversi punti di reindirizzamento. Entrambe non dipendono dal tema, non richiedono plugin di terze parti e si attivano in un minuto.
La regola di sicurezza principale è non elevare i privilegi. Un utente demo con il ruolo Subscriber o, al massimo, Editor è accettabile. Un amministratore con auto-login tramite link è una falla che un malintenzionato troverebbe in un secondo.
Se l'accesso demo è un canale di vendita per te, il login automatico smette di essere una "bella aggiunta" e diventa un elemento di conversione obbligatorio. Un link invece di login e password è la differenza tra "proverò dopo" e "provo ora".



