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?
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();
}
}
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();
}
}
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();
}
}
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.
// 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.
<?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
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.
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' );
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: