ワードプレスで管理者権限以外は管理画面(ダッシュボード)を表示せずに、ログイン/ログアウト後のページを指定する
素人にはワードプレスの管理画面が怖い
会員向けの投稿サイトを運営しているのですが、素人さんは管理画面が怖いのかイジってくれません。
ソーシャルログイン(SNSアカウントでログイン)を導入したので会員数は増えましたが、何も投稿してくれないのが悩みのタネでした。
エディタやらダッシュボードやら知らない人には恐怖すら覚えるとの感想をいただきました。
よろしい。ならば管理画面なんて取っ払おう
慣れたら使いやすいんですけどね。
慣れない人からすると、この管理画面は恐怖なんだそうな。
プラグイン「Peter’s Login Redirect」を使ってみる
ログイン後にURLを指定しちゃおうという目的で色々と探してみました。
テーマファイルのfunctions.phpを弄れば修正できるとのことですが、素人には不親切な説明なので結局プラグインを使いました。
ぬこさん。ああいう人達からすると「分からない」が「分からない」ので、仕方がないのですよ。
たまに「それくらい分かれよ?」くらいの勢いでコードがミスっていたりするんですよね。なのでプラグインを使っちゃうのが手っ取り早い。
このサイトで簡潔に説明されているので、そのまま真似すると良いですね。
しかしソーシャルログインに対応していなかった。
「Peter’s Login Redirect」はソーシャルログイン(SNSアカウントでログイン)を使った場合に対応できない。
仕方がないのでしぶしぶfunctions.phpを弄ることに。
結局functions.phpに追記
仕方がないのでfunctions.phpを弄ります。
結果的にはプラグインを入れずに済むのでサイトには優しいですね。
functions.phpを弄ると画面が真っ白になったりするので、必ずバックアップをとりましょう。おじさんとの約束です。
functions.phpがある場所
大体こういう説明は省かれてますが、以下の場所にあります。
/{WordPressがインストールされている場所}/wp-content/themes/{テーマ名}/functions.php
そういう人が多いので、説明って大事なんですよ。
んでfunctions.phpの最下部に以下のコードを追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php // ログアウト時にトップページに add_action( 'pre_get_posts', 'sort_pre_get_posts' ); function redirect_logout_page(){ $url = site_url('', 'http'); wp_safe_redirect($url); exit(); } add_action('wp_logout','redirect_logout_page'); // ログイン時に指定したページに add_action( 'admin_init', 'disable_admin_pages' ); function disable_admin_pages() { if(!current_user_can('administrator')){ $redirect_url = get_option('home'); header("Location: ".$redirect_url); exit; } } ?> |
うまくいかねぇよ!って場合はおそらく最上部と最下部の<?php ?>が犯人だと思います。
<?php ?>で一括りになってます。
テーマによって内容が異なりますが、もしコードよりも上部に?>がある場合、上の?>を外して
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// ログアウト時にトップページに add_action( 'pre_get_posts', 'sort_pre_get_posts' ); function redirect_logout_page(){ $url = site_url('', 'http'); wp_safe_redirect($url); exit(); } add_action('wp_logout','redirect_logout_page'); // ログイン時に指定したページに add_action( 'admin_init', 'disable_admin_pages' ); function disable_admin_pages() { if(!current_user_can('administrator')){ $redirect_url = get_option('home'); header("Location: ".$redirect_url); exit; } } ?> |
とすれば上手くいくかもしれません。
これで管理人以外は管理画面に入れなくなったぜ!ザマーミロだッ!
ログイン後に指定したページへジャンプさせるには
「// ログイン時に指定したページに」から?>の間を以下のように変更します。
1 2 3 4 5 6 7 8 9 |
// ログイン時に指定したページに add_action( 'admin_init', 'disable_admin_pages' ); function disable_admin_pages() { if(!current_user_can('administrator')){ $redirect_url = get_option('home'); header('Location: https://飛ばしたいURL', true, 301); exit; } } |
ついでなので、管理者以外はツールバーを非表示に
本当についでですが、ここまでやると管理者以外はツールバーなんて要らないっす。
管理画面の「か」の字も出したくない場合は、以下のコードをfunctions.phpに追加すると良いです。
1 2 3 4 |
function my_function_admin_bar( $content ) { return ( current_user_can( 'manage_options' ) ) ? $content : false; } add_filter( 'show_admin_bar', 'my_function_admin_bar' ); |
一般ユーザーから管理画面を取っ払う結論
以下理由でプラグインを使うよりもfunctions.phpに直接書き込んだほうが、確実に目的を遂行できます。
ツールバーを非表示にするのにあたって、更にプラグインを追加する手間もあるし。
・ソーシャルログインに対応できない
・プラグインのアプデとかで面倒にならない
更に負担が掛からないのでサイトに優しいです。
解決しなければコメント欄へどうぞ!