web-dev-qa-db-fra.com

Comment désactiver la redirection de 'domain.com/login' vers 'domain.com/wp-login.php'

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?

2
marek

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 );
    }
  }
);
4
s_ha_dum

Cette réponse est basée sur les résultats de “login” dans les redirections permalien vers wp-login.php wp3.6

Désactiver la redirection "/ login"

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');

Pourquoi cela n'est peut-être même pas nécessaire

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.

0
kraftner