web-dev-qa-db-fra.com

arrêter la redirection sur l'appel de/wp-admin vers/wp-login

Je construis un site web avec Wordpress + buddypress (dernière version).

Sur ce site Web, j’ai mes propres formulaires de connexion | signup | resetpass personnalisés, et je ne souhaite pas les lier à des formulaires wp-end.

Et j'ai bloqué les formulaires back-end pour tous les utilisateurs (formulaires wp-login | signup | resetpass par défaut) (avec un 404)

Donc, si vous essayez d'atteindre wp-admin/wp-login, vous verrez le 404.

Je ne veux utiliser aucun type de redirection. Ce que je veux, c'est arrêter la redirection sur une URL spéciale, comme arrêter la redirection de cette URL vers d'autres URL.

Je souhaite arrêter la redirection de /wp-admin à /wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1

Lorsque vous essayez d'atteindre:

www.example.com/wp-admin

et vous êtes non connecté , vous serez automatiquement redirigé vers:

example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1

vous serez redirigé ...
l'URL changera automatiquement
C'est l'action par défaut de wordpress.

Je veux arrêter cette redirection automatique.

lorsque vous essayez d'atteindre/wp-admin, vous devez rester sur/wp-admin (vous ne devriez pas obtenir une redirection vers wp-login ..)

veuillez voir ces 2 images pour tous les détails :
1 - image 1 - yoursite.com/wp-admin
2 - image 2 - l'URL est modifiée automatiquement ..

  • NOTE: la 404 est quelque chose que j'ai créé avec du code personnalisé pour arriver ..., ce n'est pas une erreur.

j'ai testé tellement de codes, pour l'arrêter. mais aucun n'a fonctionné pour moi.

numéro de code 1:

remove_action('template_redirect', 'redirect_canonical');

numéro de code 2:

remove_filter('template_redirect', 'redirect_canonical');

numéro de code 3:

add_action(
      'init',
      function() {
          remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
      }
  );

numéro de code 4:

function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
    return;
$admins = array(
    home_url( 'wp-admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
           $wp_query->set_404();
           get_template_part( 404 ); 
           exit();
}
$logins = array(
    home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
             $wp_query->set_404();
             get_template_part( 404 ); 
             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');

numéro codé 5:

add_action(
'template_redirect', 
function() {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('wp-admin','relative') ===  
untrailingslashit($_SERVER['REQUEST_URI'] )){
  remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
}
}
);

numéro de code 6:

function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
    return;

$requested_url = untrailingslashit( $_SERVER['REQUEST_URI'] );

$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 ) ) {
redirect_canonical( $requested_url , false );
    exit;
}

$logins = array(
    home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
redirect_canonical( $requested_url , false );
    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');

tout ce que j'ai utilisé semble ne pas faire ce que je veux. Comment puis-je le faire?

merci beaucoup.


EDIT: ce n'est pas un doublon.

j'ai aussi lu ces articles:

1 - cet article
2 - cet article
3 - cet article

3
Poofy

merci à Tomasz Struczynski qui a expliqué et répondu à ma question complètement

Vous pouvez voir la réponse à ce lien


Première - explication.

Wordpress est un peu délicat quand il s'agit de pages d'administration. Essentiellement, lorsque la page d'administration est en cours de chargement, wp-admin/admin.php est en cours d'inclusion. Dans ce fichier, une fonction appelée auth_redirect() est appelée. Elle vérifie si l'utilisateur est connecté et, dans le cas contraire, le redirige vers une page de connexion.

Comme cette fonction n’est pas une action/filtre typique, il est difficile de la désactiver. Heureusement, il appelle plusieurs crochets tout seul. L'un d'entre eux, auth_redirect_scheme, est appelé juste avant que la redirection réelle ne se produise. Il est destiné à préparer un "schéma" (http/https) pour la redirection, mais nous pouvons l'exploiter pour répondre à vos objectifs.

J'ai ajouté un crochet de filtre pour auth_redirect_scheme, avec la priorité 9999 (peu importe, mais je voulais qu'il soit en retard, juste au cas où). J'ai ensuite pris un morceau de code de auth_redirect() original utilisé pour vérifier si l'utilisateur est connecté (wp_validate_auth_cookie). S'il l'est, nous renvoyons simplement de la valeur, car rien ne doit être fait. Toutefois, si l'utilisateur n'est pas connecté, nous affichons une page d'erreur et quittons le script (pour empêcher la redirection de se produire).

Aussi, juste au cas où je désactivais le filtre wp_redirect_admin_locations. Je ne suis pas vraiment sûr, si cela est nécessaire, mais ...

Et maintenant - le code. Remarquez, cela pourrait ne pas être la solution parfaite et nécessitera quelques améliorations de votre part.

<?php
/**
 * @packageStop_Redirect
 */
/*
Plugin Name: Stop redirect
Plugin URI: 
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI: 
*/

add_action('init', 'remove_default_redirect');
add_filter('auth_redirect_scheme', 'stop_redirect', 9999);

function stop_redirect($scheme)
{
    if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {
        return $scheme;
    }

    global $wp_query;
    $wp_query->set_404();
    get_template_part( 404 );
    exit();
}

function remove_default_redirect()
{
    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
1
Poofy