WordPress: aggiungere un box per il login
Scritto da Erriko in Wordpress il 1 agosto 2009
Avrete notato che in alcuni temi WordPress si trova un box personalizzato per il login, grazie al quale è possibile fare a meno di utilizzare il widget predefinito di wp (un po’ sgradevole a vedersi e poco versatile in quanto visualizzabile solo nella sidebar).
Con questa breve guida vediamo come inserire i campi necessari al login in un qualsiasi punto del layout (e personalizzarlo come vogliamo). E come rendere questa funzione un valore aggiunto al nostro blog.

I form base per il login
Ovviamente di base è necessario fornire all’utente 2 campi, username e password, che gli permetteranno di effettuare l’accesso.
Inseriamo nel punto dove vogliamo mostrare questi due campi il seguente codice:
<form action="<?php bloginfo('url') ?>/wp-login.php" method="post">
LOGIN:
<label for="log">USER<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="10" /></label>
<label for="pwd">PASSWORD <input type="password" name="pwd" id="pwd" size="10" /></label>
<input type="submit" name="submit" value="Login »" /><br />
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
</form>
Invitiamo gli utenti a registrarsi o recuperare la password
Per fare ciò basta aggiungere due semplici collegamenti ipertestuali, nel punto più opportuno (io di solito ne metto uno sopra ed uno sotto il form).
Per la registrazione: <a rel=”nofollow”href=”<?php bloginfo(‘url’) ?>/wp-login.php?action=register”>REGISTRATI</a>
Per il recupero della password smarrita: <a href=”<?php bloginfo(‘url’)?>/wp-login.php?action=lostpassword”>Smarrita la password?</a>
Facciamo sentire gli utenti a casa loro
Una volta effettuato il login, perchè continuare a vedere il form se non è più necessario? Perchè non mostrare un messaggio di benvenuto con, magari, la possibilità di accedere direttamente alle funzioni più utilizzate?
Per fare ciò è necessario innanzitutto richiamare un paio di variabili e in secondo luogo creare una struttura if else che si comporti diversamente a seconda che l’utente sia loggato o meno.
Ecco un esempio:
<?php global $user_ID, $user_identity, $user_level ?>
<?php if ( $user_ID ) : ?>
<ul>
<li>Benvenuto <?php echo $user_identity ?>!</li> |
<li><a href="<?php bloginfo('url') ?>/wp-admin/">Bacheca</a></li> |
<?php if ( $user_level >= 1 ) : ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/post-new.php">Scrivi un articolo</a></li> |
<?php endif // $user_level >= 1 ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/profile.php">Profilo</a></li> |
<li><a href="<?php echo wp_logout_url(get_permalink()); ?>">Logout</a></li>
</ul>
<?php elseif ( get_option('users_can_register') ) : ?>
<form action="<?php bloginfo('url') ?>/wp-login.php" method="post">
<a rel="nofollow"href="<?php bloginfo('url') ?>/wp-login.php?action=register">REGISTRATI</a> oppure effettua il LOGIN:
<label for="log">USER <input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="10" /></label>
<label for="pwd">PASSWORD <input type="password" name="pwd" id="pwd" size="10" /></label>
<input type="submit" name="submit" value="LOGIN »" /><br />
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
<a href="<?php bloginfo('url')?>/wp-login.php?action=lostpassword">Smarrita la password?</a>
</form>
Come si intuisce guardando il codice, in questo caso, wordpress controlla che l’utente sia loggato o meno e restituisce nel primo caso un messaggio di benvenuto “Benvenuto Mario Rossi!” (per dirne una), il collegamento all bacheca (dashboard), all’editor degli articoli, e alla pagina di modifica del profilo (ma si può aggiungere di tutto, dipende anche dalle necessità e dallo spazio). Nel secondo caso invece mostra il box per il login che abbiamo visto prima, con la possibilità di recuperare la password smarrita oppure di registrarsi nel caso non lo si fosse già.
Questo Blog è mio… E qui comando ioooo!! (sulle note du una celebre canzone
)
Possiamo personalizzare ulteriormente il login al nostro blog riservandoci, per così dire, “un trattamento di riguardo” (mi sembra anche doveroso, no?)
Un’idea sarebbe un messaggio personalizzato per l’admin:
<?php if ( $user_ID ) : ?>
<?php if ( $user_identity == 'admin' ) {
echo '<b>I miei omaggi o mio padrone</b>';
}
else{
echo 'Bentornato/a '.$user_identity;
} ?>
<br /><br />
Puoi accedere ai seguenti servizi:<br />
<a href="<?php bloginfo('url') ?>/wp-admin/">Bacheca</a><br />
<?php if ( $user_level >= 2 ) : ?>
<a href="<?php bloginfo('url') ?>/wp-admin/post-new.php">Scrivi un articolo</a><br />
<?php endif // $user_level >= 2 ?>
<a href="<?php bloginfo('url') ?>/wp-admin/profile.php">Modifica il tuo profilo</a><br />
<a href="<?php echo wp_logout_url(get_permalink()); ?>">LOGOUT »</a>
<?php elseif ( get_option('users_can_register') ) : ?>
<form action="<?php bloginfo('url') ?>/wp-login.php" method="post">
<h2>LOGIN</h2><br />
<label for="log">USER<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="10" /></label><br />
<label for="pwd">PASSWORD<input type="password" name="pwd" id="pwd" size="10" /></label>
<input type="submit" name="submit" value="INVIA" /><br />
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
</form>
<a href="<?php bloginfo('url') ?>/wp-login.php?action=register">REGISTRATI SUBITO!</a>
<a href="<?php bloginfo('url')?>/wp-login.php?action=lostpassword">Smarrita la password?</a>
<?php endif // get_option('users_can_register') ?>
Nel caso il vostro nome utente fosse diverso da admin (e per questioni di sicurezza in effetti sarebbe meglio), basterebbe sostituire ‘admin’ con ‘nomeutente’ (facendo attenzione a non cancellare gli apici).
Con le opportune modifiche, è possibile personalizzare il messaggio di benvenuto per più utenti o gruppi grazie ad un minimo di php (liberate la fantasia!).
Nella parte alta di questo stesso blog potete vedere come ho riutilizzato questi concetti per gestire il lato login, benvenuto e registrazione. Fatemi sapere cosa ne pensate!
Buona personalizzazione e…
Happy Blogging





Ottimo post davvero interessante.
L’unica cosa che manca è la destinazione del codice da inserire.
Quindi Ti chiedo: dove va copiato il codice?
Michele Aucelli
Grazie dei complimenti!
Come ho scritto nel post il codice può essere inserito nel punto che meglio crediamo e può essere anche abbellito con un po’ di css se lo conosci…
Visto che mi sembri un po’ nuovo del settore aggiungo che ovviamente parliamo dei file del tema, che trovi in wp-content/themes e che modifichi con un editor qualsiasi (io uso notepad++ ma va bene anche il semplice notepad…).
Ciao Enrico, sto testando il tuo codice in locale inserendolo in una div posta prima della sidebar per creare un box, ma mi restituisce un bel parse error… sicuro che non ci sia qualche errore di scrittura? Sto parlando del codice che hai riportato dopo il “facciamo sentire gli utenti a casa loro”.
Grazie
Il codice proposto qui è stato testato più volte da diversi utenti ed utilizzato su un tema di mia produzione che presto verrà reso pubblico (e gratuito) qui su erriko.it per cui sono piuttosto certo della sua esattezza… Ovviamente mai dire mai, per cui ti invito a provarlo dapprima esattamente come proposto qui rispettando l’ordine di inserimento e copiando il codice cliccando sui box relativi al sorgente sul tasto “view plain” e copiandolo da lì per essere certi che non ci siano errori. Un parse error indica generalmente che stai utilizzando una variabile non dichiarata prima o che il codice non è annidato correttamente, per cui prima dovresti copiarlo così com’è per provarlo e una volta sicuro che funzioni personalizzarlo sistemandolo nei div.
Fammi sapere se con ulteriori test hai ancora problemi ed eventualmente provvederò a cercare il problema (al momento non ho sottomano un wp demo per cui dovrei crearlo ad hoc…)
Io anche inserendo lo script “facciamo sentire gli utenti a casa loro” ricevo il seguente errore:
Parse error: syntax error, unexpected $end in /home/mhd-01/www.calciomania.eu/htdocs/wp-content/themes/Raceclan/header.php on line 95
Inviami per email il tuo header.php e vedro’ di dare un’occhiata. Considera che questo codice, con le dovute modifiche css, lo trovi funzionante qui su erriko.it sulla sidebar destra.