Je souhaite installer quelque chose de différent de wordpress sous "mydomain.com/login", mais WordPress redirige automatiquement ce lien "/ login" vers "/wp-login.php".
Où puis-je désactiver cette redirection?
Si vous regardez canonical.php
vous remarquerez que la fonction wp_redirect_admin_locations
est raccrochée très tard-- à la priorité 1000 . Cela signifie que presque toutes les fonctions liées à redirect_canonical
s'exécutent avant celle-ci. Donc, supprimez conditionnellement wp_redirect_admin_locations
du crochet template_redirect
.
add_action(
'template_redirect',
function() {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('login','relative') === untrailingslashit( $_SERVER['REQUEST_URI'] )){
remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
}
}
);
Cette réponse est basée sur les résultats de “login” dans les redirections permalien vers wp-login.php wp3.6
Comme nous l’avons déjà indiqué, le code pertinent se trouve tout à la fin dans /wp-includes/canonical.php
Vous devez supprimer la valeur par défaut "wp_redirect_admin_locations" et remplacez-la par une version personnalisée légèrement modifiée . Ajoutez ceci à votre fichier function.php.
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$admins = array(
home_url( 'wp-admin', 'relative' ),
home_url( 'dashboard', 'relative' ),
home_url( 'admin', 'relative' ),
site_url( 'dashboard', 'relative' ),
site_url( 'admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
wp_redirect( admin_url() );
exit;
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
wp_redirect( site_url( 'wp-login.php', 'login' ) );
exit;
}
}
function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000 );
}
add_action('init','remove_default_login_redirect');
De plus, vous devez savoir que la redirection ne s'applique que s'il n'y a rien d'autre à/login. Dès que par exemple vous créez une page/login la redirection ne s'applique plus. (Voir /wp-includes/canonical.php:553 pour savoir où cela se produit.