2017年以前の旧ブログ

BLOG2017

WPでログイン画面を固定ページに表示

ダーシノ Other Blog

固定ページのパスワード機能ではなく、ユーザー情報のIDとパスワードで固定ページの表示、非表示を切り替えたかったのでログイン画面をあれこれした時の備忘録。

ログイン画面を固定ページに表示

表示させたい固定ページのテンプレートに

<form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
<dl>
<dt>ユーザー名:</dt><dd><input type="text" name="log" id="login_username" value="" /></dd>
<dt>パスワード:</dt><dd><input type="password" name="pwd" id="login_password" value="" /></dd>
</dl>
<p><input type="submit" value="ログイン" /></p>
</form>

上記を記載。
これだけで固定ページにログインフォームが表示されます。

login

これでログイン機能は動きます。

ただしこのままだとログイン後は管理画面のダッシュボードが表示されます。

 

ログイン後のページをリダイレクト

固定ページにログインフォームを表示したらログイン後はその固定ページを表示させたい。
そんな時はfunction.phpでリダイレクトを設定します。

ユーザー別でリダイレクトを設定

add_action('wp_login', 'redirect_roll', 10, 2);
function redirect_roll($user_login, $user){
	if( $user->ID == 5 ){ // ユーザーIDを指定
		wp_redirect( 'リダイレクト先URL' );
		exit();
	}
}

 

権限別でリダイレクトを設定

if ( !is_super_admin() ) {
	add_action( 'admin_init', 'redirect_dashiboard' );
}
function redirect_dashiboard() {
	if ( '/wp-admin/index.php' == $_SERVER['SCRIPT_NAME'] ) {
		wp_redirect( 'リダイレクト先URL' );
	}
}

上記は !is_super_admin() で管理者権限以外でリダイレクトを実行してます。

これでログイン後に固定ページを続けて閲覧する事が可能です。
また、この場合でも http://ドメイン/wp-admin/ で管理画面は表示されます。

 

/wp-admin/にアクセスしたらリダイレクト

例えば、ログイン状態でも管理画面にアクセスさせたくない場合、権限によって/wp-admin/にアクセスしたら特定のページへリダイレクトできます。

add_action( 'auth_redirect', 'subscriber_go_to_home' );
function subscriber_go_to_home( $user_id ) {
	$user = get_userdata( $user_id );
	if ( !$user->has_cap( 'edit_posts' ) ) {
		wp_redirect( 'リダイレクト先URL'  );
		exit();
	}
}

全権限でリダイレクトしてしまうと、誰も管理画面にアクセスできなくなるため権限別で設定してます。
上記の場合は購読者がアクセスした場合リダイレクトするように実装してます。

次はログインエラー時のリダイレクトを防ぎたい(固定ページ内でエラーメッセージ出るように)のですが、この機能は社内のつよぽんに実装してもらってまだ内容見てないです。

次回ブログで機会があれば!