第70回 初心者がワードプレスの独学を続ける。 管理画面を表示しない
Turnkey bbPressを使ってみました(3)
前回の第69回でTurnkey bbPressの設定、メニュータブ「Admin>Interface Options」からHide WP Admin BarでAdmin Barを管理者以外は非表示にしました。そのためbbPressの権限が参加者(購読者)の場合はログイン後もAdmin Barは表示されません。
しかしながら、参加者がログイン後にブラウザのアドレスに/wp-admin/を直接入力するとダッシュボード(管理画面)が表示されます。
また、ログインをしなくても/wp-admin/を直接入力するとログインフォームが表示されます。
ここから参加者ユーザーがログインするとワードプレスの購読者として、そのまま管理画面に入ってしまいます。いづれにしてもプロフィールの変更しか出来ないようなので、特に問題は無いと思いますが、できれば管理画面は表示されない方が良さそうです。
管理画面を表示しない
ログインしたらフォーラムトップへ
先ず、ログインしたらフォーラムトップ(/forums-top/)へリダイレクトするように変更しました。「https://analyzegear.co.jp/blog/952」を参考にしました。※フォーラムトップはフォーラムインデックスの固定ページです。
以下を子テーマのfunctions.phpに追記しました。これでログイン後はフォーラムトップが表示されます。
// ログイン直後は /forums-top/ へリダイレクト
function bbp_login_redirect( $redirect_to, $request, $user ) {
$redirect_to = ‘/forums-top/’;
return $redirect_to;
}
add_filter( ‘login_redirect’, ‘bbp_login_redirect’, 10, 3 );
管理画面からリダイレクト
これだけではログイン後にブラウザのアドレスに/wp-admin/を直接入力すれば管理画面が開きます。そのため、管理画面もフォーラムトップへリダイレクトさせます。「https://analyzegear.co.jp/blog/952」を参考にしました。
以下を子テーマのfunctions.phpに追記しました。これでログイン後も管理画面は開かなくなります。
//管理画面から /forums-top/ へリダイレクト
function bbp_user_redirect(){
wp_redirect( ‘/forums-top/’ );
exit();
}
add_action( ‘auth_redirect’, ‘bbp_user_redirect’ );
管理者だけ除外
しかし、このままだと管理者も入れないです。管理者だけ除外します。以下のように変更しました。
/管理画面から /forums-top/ へリダイレクト(管理者以外)
function bbp_user_redirect(){
if ( !current_user_can(‘administrator’)){
wp_redirect( ‘/forums-top/’ );
exit();
}
}
add_action( ‘auth_redirect’, ‘bbp_user_redirect’ );
これで、ログイン後は全員がフォーラムトップ(/forums-top/)ページへリダイレクトされます。管理者以外は管理画面からフォーラムトップへリダイレクトされます。
管理者は、ログイン後アドレスに/wp-admin/を入力すれば管理画面に入ることができます。また、Turnkey bbPressのAdmin設定で管理者だけにAdmin Barを表示にしています。そのため、Admin Barからも管理画面に入れます。
SiteGurdの動作確認
SiteGurdの動作を確認してみます。ログインページ変更を有効にします。(※よろしければ、SiteGurdの設定などは第24回を参照ください)
画像認証を有効にしておくと以下のようにログイン専用ページ、右サイトバーにあるログインウィジェットにも画像認証が入ります。非常に簡単で便利です。※ログイン専用の固定ページを別途作成してあることを前提に記載しています。
フォーラム用にログインページ、ログインウィジェットを設置しています。仮に入力ミスがあった場合ワードプレスのログインフォームが開きます。ブラウザのアドレスを見るとSiteGuardで設定したログインページ変更アドレス/login_*****/が表示されています。この時点では登録されたユーザーとは限らないので見えない方が良さそうに思います。
そのため、ログインページ変更アドレスからフォーラム専用のアドレスにリダイレクトさせた方が良さそうです。
以下を子テーマのfunctions.phpに追記しました。
アクセスアドレスに’.local/login_’を含み’?action=rp’を含まなければ’/forums-top/bbs_login/’へリダイレクトさせます。
//サイトガードのログイン変更アドレスから/forums-top/bbs_login/へリダイレクト
$acces_url = $_SERVER[“HTTP_HOST”].$_SERVER[“REQUEST_URI”];
//
if((strpos($acces_url,’.local/login_’) !== false) && (strpos($acces_url,’?action=rp’) == false)){
wp_redirect( ‘/forums-top/bbs_login/’ , 301);
}
フォーラム用のログインページ、ログインウィジェットでのエラーはログインページへリダイレクトされました。/wp-admin/はサイトガードでログインページ変更しているのでページが無いと表示されました。正常です。
http://*****.local/login_*****を入力すると、http://*****.local/forums-top/bbs_login/のログインページが開きました。上手く行ったようです。
パスワードリセットのフォーム
Turnkey bbPressの設定でパスワードリセットなどすると下記のようなメールが送信されます。
パスワードリセットのためリンクをクリックすると以下のようなフォームが表示されます。
①ヘッド画像は「https://ja.wordpress.org/」にリンクされています。右クリックするとヘッド画像のタイトルは②のように”Powered by Word..”と表示されています。③に「ログイン|登録、サイトに戻る」が表示されています。①②は気になりませんが③はできれば無い方が良さそうです。
③は非表示、①は/forums-top/②はブログ名に変更します。以下を子テーマのfunctions.phpに追記しました。
//ヘッド画像のタイトル変更
function theme_login_logo_url_title() {
return get_bloginfo( ‘name’ );
}
add_filter( ‘login_headertext’, ‘theme_login_logo_url_title’ );
//
//ログイン画像のリンク先変更
function custom_login_logo_url() {
return ‘/forums-top/’;
}
add_filter( ‘login_headerurl’, ‘custom_login_logo_url’ );
//
//「ログイン|登録」と「← サイトへ戻る」を非表示
function login_nav_backtoblog_hide() {
?>
<style>
.login #nav,
.login #backtoblog {
display: none;
}
</style>
<?php
}
add_action( ‘login_enqueue_scripts’, ‘login_nav_backtoblog_hide’ );
確認します。①ヘッド画像のリンクはフォーラムトップ②ヘッド画像のタイトルはサイトのタイトル③「ログイン|登録、サイトに戻る」は消えています。とりあえず大丈夫な感じです。※①は図示してません。
※動作の確認はLocal(Local by Flywheel)で構築したローカル(パソコン)環境で行っています。
※SiteGuadのログインアドレス変更の機能はLocalのWeb Server環境をApacheにしないと動作しません。
まとめ
Turnkey bbPress by WeaverThemeを使う場合に、ログイン後は専用ページへ、管理画面から専用ページへのリダイレクトついて記載しました。パスワードリセットフォームのlogin_navを非表示にしました。また、サイトガードも取り入れて動作確認をしました。セキュリティも向上したと思います。素人なのでこのあたりが限度です。