web-dev-qa-db-fra.com

Désactiver ou rediriger WP-login.php

Existe-t-il un moyen d'empêcher les visiteurs, connectés ou non, d'atteindre mysite.com/wp-login.php?

J'ai un formulaire de connexion séparé qui est tout ce dont nous avons besoin. Je sais que je peux reformuler le formulaire généré par wp-login, mais je préfère ne pas avoir à le gérer du tout. J'ai essayé divers filtres et crochets et je n'arrive pas à le faire rediriger. J'ai également essayé d'utiliser une redirection .htaccess et j'ai constaté que cela fonctionne, mais cela empêche ensuite mon formulaire de connexion/déconnexion personnalisé de fonctionner.

Des idées?

8
jchwebdev

Après avoir trouvé cette question et testé quelques-unes des réponses, voici une version "nettoyée" de ce que j'utilise dans un environnement de production.

Cette version ne génère aucun avis/erreur, et permet également aux réinitialisations de mot de passe de fonctionner:

// Hook the appropriate WordPress action
add_action('init', 'prevent_wp_login');

function prevent_wp_login() {
    // WP tracks the current page - global the variable to access it
    global $pagenow;
    // Check if a $_GET['action'] is set, and if so, load it into $action variable
    $action = (isset($_GET['action'])) ? $_GET['action'] : '';
    // Check if we're on the login page, and ensure the action is not 'logout'
    if( $pagenow == 'wp-login.php' && ( ! $action || ( $action && ! in_array($action, array('logout', 'lostpassword', 'rp', 'resetpass'))))) {
        // Load the home page url
        $page = get_bloginfo('url');
        // Redirect to the home page
        wp_redirect($page);
        // Stop execution to prevent the page loading for any reason
        exit();
    }
}
14
cale_b

Essayez ceci dans functions.php de votre thème

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/');
  exit();
 }
}
10
Androliyah

Ajoutez une variable GET pour l’action de déconnexion et tout fonctionnera bien.

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
  wp_redirect('http://YOURSITE.com/');
  exit();
 }
}
3
dean

J'utilise le plugin WordPress Renommez wp-login.php depuis un certain temps.

Il vous permet de basculer wp-login.php vers n’importe quel autre chemin. J'avais des bots claquant mes pages de connexion, et maintenant je n'ai aucun hit.

2
gdaniel
// https://codex.wordpress.org/Plugin_API/Filter_Reference/login_url#Examples
add_filter('login_url', 'custom_login_url', 10, 3);

function custom_login_url($login_url, $redirect, $force_reauth) {
    return home_url('/login/?redirect_to=' . $redirect);
}

Cela redirigera vers/login au lieu du formulaire vicieux wp-login.

1
corysimmons
<?php
/* Template Name: Register Template */
if(is_user_logged_in()) { $user_id = get_current_user_id();$current_user = wp_get_current_user();$profile_url = get_author_posts_url($user_id);$edit_profile_url = get_edit_profile_url($user_id); ?>
<div class="regted">
    You're login with nickname <a href="<?php echo $profile_url ?>"><?php echo $current_user->display_name; ?></a> Are you want to <a href="<?php echo esc_url(wp_logout_url($current_url)); ?>">Exit</a> ?
</div>
<?php } else { ?>
<div class="register">
    <?php $err = ''; $success = ''; global $wpdb, $PasswordHash, $current_user, $user_ID; if(isset($_POST['task']) && $_POST['task'] == 'register' ) { $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
        $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
        $email = $wpdb->escape(trim($_POST['email']));
        $username = $wpdb->escape(trim($_POST['username']));

        if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "") {
            $err = 'Please enter password in this field';
        } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $err = 'Email is invalid';
        } else if(email_exists($email) ) {
            $err = 'Email is existed';
        } else if($pwd1 <> $pwd2 ){
            $err = 'Password does not match the confirm password';
        } else {
            $user_id = wp_insert_user( array ('user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
            if( is_wp_error($user_id) ) {
                $err = 'Error on user creation.';
            } else {
                do_action('user_register', $user_id);
                $success = 'Registered Successfully';
            }
        }
    }
    ?>
  <link  rel="stylesheet" type="text/css"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--display error/success message-->
<div id="message">
        <?php
            if(! empty($err) ) :
                echo ''.$err.'';
            endif;
        ?>
        <?php
            if(! empty($success) ) :
                $login_page  = home_url( '/login' );
                echo ''.$success. '<a href='.$login_page.'> Login</a>'.'';
            endif;
        ?>
    </div>

           <div class="container">    
        <div id="loginbox" style="margin-top:100px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
          <div style="padding-bottom: 50px;" class="col-md-6 col-md-offset-4 col-sm-8 col-sm-offset-2"/><img src="#url.logo"></div>
    <form class="form-horizontal" method="post" role="form">
<div class="form-group">
    <label class="control-label  col-sm-3" for="username">Username:</label>
    <div class="col-sm-9">
    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="email">Email:</label>
    <div class="col-sm-9">
        <input type="email" class="form-control" name="email" id="email" placeholder="Email">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd1">Password</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd1" id="pwd1" placeholder="Enter your password">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd2">Retype password:</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd2" id="pwd2" placeholder="Retype password">
    </div>
</div>
<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-9"  style="text-align:center;">
    <button type="submit" class="btn btn-primary">Register</button>
    <input type="hidden" name="task" value="register" /><br/>
    </div>
</div>
</form>
</div>
</div>
</div>
<?php 
get_footer();
 ?>
<div class="message">
    <?php
        $login  = (isset($_GET['login']) ) ? $_GET['login'] : 0;
        if ( $login === "failed" ) {
                echo '<strong>Error</strong> Wrong username or password!';
        } elseif ( $login === "empty" ) {
                echo '<strong>Error:</strong>Username or password is blank field.';
        } elseif ( $login === "false" ) {
                echo '<strong>ERROR:</strong> Exit';
        }
    ?>
</div>
<?php } ?>

Exemple ma page de connexion personnalisée. Enregistrer login.php et mettre le code

add_action('init','wpse_login');

function wpse_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/login.php');
  exit();
 }
}

dans functions.php

0
Rei

Si votre intention est de protéger le wp-login.php des inconnus même s'il est en mesure de le voir, le moyen le plus simple consiste à demander une autorisation (autorisation de base) pour accéder à wp-login.php.

Dans Apache, l'auth est implémenté via une combinaison de htaccess et d'un fichier de mots de passe . La première fois, dans une session de navigateur, que quelqu'un tente d'accéder à wp-login.php, il sera invité à entrer un nom d'utilisateur et un mot de passe (avant la connexion à wordpress).

Pour simplifier les choses, ces nom d'utilisateur et mot de passe peuvent être les mêmes pour toutes les personnes auxquelles vous souhaitez donner accès à wp-login.php, car elles doivent toujours entrer leur identifiant wordpress après avoir passé avec succès la première boîte de dialogue d'authentification.

0
Gaia

Remplacez $pageid par la page vers laquelle vous souhaitez rediriger les utilisateurs.

/* Redirect log in page */
function redirect_login_page(){
  // Store for checking if this page equals wp-login.php
   $page_viewed = basename( $_SERVER['REQUEST_URI'] );

  // permalink to the custom login page
  $login_page  = get_permalink($pageid);

  if( $page_viewed == "wp-login.php" ) {
    wp_redirect( $login_page );
    exit();
  }
}

add_action( 'init','redirect_login_page' );
0
Mohamed Omar

WP-login gère la connexion, la déconnexion, l'enregistrement, la réinitialisation et la récupération du mot de passe. En supposant que vous souhaitiez modifier la page de connexion frontale. Vous pouvez utiliser en toute sécurité le code suivant:

function custom_login_page() {
 $new_login_page_url = home_url( '/login/' ); // new login page
 global $pagenow;
 if( $pagenow == "wp-login.php" && $_SERVER['REQUEST_METHOD'] == 'GET') {
    wp_redirect($new_login_page_url);
    exit;
 }
}

if(!is_user_logged_in()){
 add_action('init','custom_login_page');
}

Cet extrait de code va:

  1. Rediriger tous les visiteurs du site vers une nouvelle page de connexion.
  2. La déconnexion fonctionnera sans problème
  3. Sur votre page de connexion personnalisée, vous devrez créer des formulaires de connexion, d'enregistrement et de réinitialisation de mot de passe personnalisés. Toutefois, vos formulaires personnalisés peuvent publier des données en toute sécurité sur wp-login.php car les demandes de publication ne sont pas redirigées.
0
Fiaz Husyn