Reindirizzare wp-login.php ad un'altra pagina
Vorrei reindirizzare la pagina wp-login.php alla pagina /login.
Quindi quando un utente clicca su un link come questo <a href="/wp-login.php">accedi</a>, WordPress lo reindirizzerà a /register.
Ho trovato questa funzione e l'ho modificata:
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if (( 'wp-login.php' == $pagenow ) && (!is_user_logged_in())) {
wp_redirect('/login');
exit();
}
Non sono molto esperto con la programmazione WordPress.
Il reindirizzamento funziona correttamente, ma l'autenticazione sembra essere compromessa.
Quando inserisco login/password, la stessa pagina (/login) si ricarica senza effettuare l'autenticazione.
Avete suggerimenti per correggere la funzione di reindirizzamento?
Se sei interessato solo ai link di accesso visualizzati sulle tue pagine, dovresti essere in grado di modificare l'URL agganciando il filtro login_url. Questo non reindirizzerà un utente che digita direttamente http://MYSITE/wp-login.php nel browser, ma dovrebbe influenzare i link di accesso visualizzati in tutto il tuo sito.
Questo è il codice di esempio dalla pagina Codex di login_url:
add_filter( 'login_url', 'my_login_page', 10, 2 );
function my_login_page( $login_url, $redirect ) {
return home_url( '/my-login-page/?redirect_to=' . $redirect );
}
1. Modifica il tuo file .htaccess – aggiungi questa riga dopo la regola di riscrittura di index.php:
RewriteRule ^index\.php$ – [L]<br />
RewriteRule ^tuopercorsosegreto$ wp-login.php [L,NC,QSA]
dove tuopercorsosegreto è il percorso al tuo pannello di amministrazione.
2. Modifica la funzione login_header nel file wp-login.php – aggiungi questo codice appena prima della riga 59 (dove inizia il tag HTML doctype, per prevenire errori di invio degli header):
<?php $uri = $_SERVER['REQUEST_URI']; if(stripos($uri, ‘wp-login’) or stripos($uri, ‘wp-admin’) && !stripos($GLOBALS["HTTP_COOKIE"], ‘wordpress_logged_in’)) { header("Location: ".get_site_url().'/tuopercorsosegreto' ); exit(); } ?>
In realtà ho già un plugin open source che fa esattamente questo:
https://github.com/tripflex/wp-login-flow
È stato creato per richiedere agli utenti di verificare le loro email, ma puoi disabilitare questa funzionalità e utilizzare solo la funzione di riscrittura, che è funzionante nell'ultima versione disponibile sul repository di WordPress (1.0.0).
Puoi dare un'occhiata al codice per vedere come gestisco le riscritture:
https://github.com/tripflex/wp-login-flow/blob/master/classes/rewrite.php#L312
Sto lavorando proprio adesso a degli aggiornamenti importanti e a delle patch, ma per ora la versione 1.0.0 funziona perfettamente per le riscritture. Buon utilizzo :)
Se creerai una pagina di login personalizzata all'indirizzo /login, allora crea un rewrite:
function restrict_admin() {
if ( ! current_user_can( 'manage_options' ) && '/wp-admin/admin-ajax.php' != $_SERVER['PHP_SELF'] ) {
wp_redirect( site_url() );
}
}
add_action( 'admin_init', 'restrict_admin', 1 );
Questo codice verificherà se l'utente è un amministratore e se non lo è WordPress lo reindirizzerà alla homepage del sito.
Crea anche un template separato per il tuo login personalizzato e utilizza i valori predefiniti di WordPress all'interno del template:
$args = array( 'redirect' => site_url( $_SERVER['REQUEST_URI'] ) );
wp_login_form( $args );
Puoi anche modificare l'indirizzo di reindirizzamento per la pagina di login. Ma è utile anche verificare gli errori di login e magari aggiungere del codice per il corretto reindirizzamento dopo un tentativo fallito. Per queste operazioni utilizza gli hook wp_login_failed e authenticate.