ログインしているかどうかにかかわらず、訪問者がmysite.com/wp-login.php
にアクセスするのを防ぐ方法はありますか?
私が必要とするのはこれだけの個別のログインフォームがあります。私はwp-login
によって生成されたフォームを再スタイルすることができることを知っています、しかし私はむしろそれを全く扱う必要はありません。私はさまざまなフィルタやフックを試しましたが、リダイレクトさせることはできません。また、.htaccess
リダイレクトを使用してみましたが、これでうまくいくことがわかりましたが、カスタムログイン/ログアウトフォームが機能しなくなりました。
アイデア?
この質問を見つけ、いくつかの答えをテストした後、以下は実稼働環境で使用しているものの「クリーンアップ」バージョンです。
このバージョンでは、通知やエラーは発生しません。また、パスワードのリセットも機能します。
// 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();
}
}
テーマのfunctions.phpでこれを試してください。
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();
}
}
ログアウトアクション用のGET変数を追加すればうまくいきます。
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
wp_redirect('http://YOURSITE.com/');
exit();
}
}
私はWordPressのプラグインを使ってきました wp-login.phpの名前を変更しました かなり前から。
wp-login.php
を他のパスに切り替えることができます。私はボットが私のログインページを激突させていた、そして今私はゼロヒットを得る。
// 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);
}
これは厄介なwp-login形式の代わりに/ 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 } ?>
カスタムログインページの例login.phpを保存してコードを書き込む
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();
}
}
functions.php
に
あなたの意図がwp-login.php
をそれを見ることさえできない見知らぬ人から保護することであるならば、そうするための最も簡単で効率的な方法はwp-login.php
にアクセスするための認証(基本認証)を要求することです。
Apacheでは、authはhtaccessとパスワードファイルの組み合わせで実装されています 。ブラウザセッション内で初めて、誰かがwp-login.php
にアクセスしようとすると、(wordpressログインの前に)ユーザー名とパスワードの入力を求められます。
わかりやすくするために、このユーザー名とパスワードは、最初の認証ダイアログボックスを正常に通過した後もワードプレスログインを入力する必要があるため、wp-login.php
にアクセスするすべてのユーザーに対して同じにすることができます。
$pageid
を、ユーザーをリダイレクトしたいページに置き換えます。
/* 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ログインは、ログイン、ログアウト、登録、パスワードのリセット、および取得を処理します。フロントエンドのログインページを変更したいとします。次のコードを安全に使用できます。
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');
}
このコードスニペットは次のことを行います。