Redirecționarea wp-login.php către o altă pagină
Aș dori să redirecționez această pagină wp-login.php către pagina /login.
Astfel, când un utilizator face click pe un link de genul <a href="/wp-login.php">login</a>, WordPress îl va redirecționa către /register.
Am găsit această funcție și am modificat-o:
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if (( 'wp-login.php' == $pagenow ) && (!is_user_logged_in())) {
wp_redirect('/login');
exit();
}
Nu sunt foarte priceput la programarea în WordPress.
Redirecționarea funcționează bine, dar autentificarea pare să fie defectă.
Când introduc datele de autentificare (login/parolă), aceeași pagină (/login) se reîncarcă fără a fi autentificat.
Aveți vreo sugestie pentru a repara funcția de redirecționare?
Dacă vă preocupați doar de linkurile de autentificare afișate pe paginile dvs., ar trebui să puteți modifica URL-ul prin conectarea la filtrul login_url. Acest lucru nu va redirecționa un utilizator care introduce direct în browser http://SITULMEU/wp-login.php, dar ar trebui să afecteze linkurile de autentificare afișate pe întregul site.
Acesta este codul exemplu de pe pagina Codex login_url:
add_filter( 'login_url', 'my_login_page', 10, 2 );
function my_login_page( $login_url, $redirect ) {
return home_url( '/pagina-mea-de-login/?redirect_to=' . $redirect );
}
1. Modifică fișierul tău .htaccess – adaugă această linie după regula de rescriere index.php:
RewriteRule ^index\.php$ – [L]<br />
RewriteRule ^yoursecretpath$ wp-login.php [L,NC,QSA]
unde yoursecretpath reprezintă calea ta către panoul de administrare.
2. Modifică funcția login_header din fișierul wp-login.php – adaugă acest cod chiar înainte de linia 59 (unde începe tag-ul HTML doc type, pentru a preveni eroarea de trimitere a headerelor):
<?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().'/yoursecretpath' ); exit(); } ?>
De fapt, am deja un plugin open source care face deja acest lucru:
https://github.com/tripflex/wp-login-flow
A fost creat pentru a necesita ca utilizatorii să-și verifice emailurile, dar poți dezactiva această funcție și să folosești doar funcția de rescriere, care este funcțională în cea mai recentă versiune din depozitul WordPress (1.0.0).
Poți arunca o privire la cod pentru a vedea cum gestionăm rescrierile:
https://github.com/tripflex/wp-login-flow/blob/master/classes/rewrite.php#L312
De fapt, lucrez acum la acest plugin pentru a adăuga actualizări majore și patch-uri, dar pentru moment versiunea 1.0.0 funcționează perfect pentru rescrieri. Distracție plăcută :)
Dacă veți crea o pagină personalizată de autentificare la adresa /login, atunci creați o rescriere:
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 );
Acest cod va verifica dacă utilizatorul este administrator și dacă nu este, WordPress îl va redirecționa înapoi la pagina principală a site-ului.
Creați de asemenea un șablon separat pentru autentificarea personalizată și utilizați funcțiile implicite de autentificare din WordPress în cadrul șablonului:
$args = array( 'redirect' => site_url( $_SERVER['REQUEST_URI'] ) );
wp_login_form( $args );
Puteți de asemenea schimba adresa de redirecționare pentru pagina de autentificare. Dar este util și să verificați erorile de autentificare și poate să adăugați cod pentru redirecționarea corectă după o încercare eșuată. Pentru aceste sarcini utilizați hook-urile wp_login_failed și authenticate.