WordPress:ログイン後にダッシュボードには移動せずに、他ページヘリダイレクトさせる方法

WordPress:ログイン後にダッシュボードには移動せずに、他ページヘリダイレクトさせる方法

フォーラムで見かけて個人的にも覚えておきたいと思う内容だったので備忘録。
デフォルトのWordPressはログイン後にダッシュボードに移動しますが、それを任意のページにリダイレクトさせる方法です。
また、ダッシュボードへ移動できないのにメニューに「ダッシュボード」の項目が表示されているのはアレなので、これを非表示にする方法も併せて紹介します。

ログイン後に任意のページヘリダイレクトさせる

「ダッシュボード」にアクセスしようとした際に別ページへリダイレクトさせるには、functions.phpに下記のように記述することで実装できます。

functions.php

add_action( 'admin_init', 'redirect_dashiboard' );
function redirect_dashiboard() {
  if ( '/wp-admin/index.php' == $_SERVER['SCRIPT_NAME'] ) {
    wp_redirect( admin_url( 'edit.php' ) );
  }
}

上記の場合は「ダッシュボード」にアクセスしようとすると「投稿一覧」にリダイレクトされるという記述になり、記述後にログインすると「投稿一覧」がはじめに表示されるようになるのを確認できます。
ここではリダイレクト先を「投稿一覧」に指定していますが、他のページにしたいという場合はソース赤文字の箇所を任意のページに変更することでリダイレクト先を変更できます。

この方法は、以下フォーラムで紹介されていたものです。

管理者の場合は無効にする

先ほどの方法でログイン時に任意のページヘリダイレクトさせることができますが、この方法だと全てのログインユーザーに対して行われます。
管理者までリダイレクト処理は必要ないという場合は、以下のようにis_super_admin()を用いて記述することで管理者の権限を持つユーザーは「ダッシュボード」にアクセスでき、それ以外の権限を持つユーザーはリダイレクトされるという動きに変更できます。

functions.php

if ( !is_super_admin() ) {
  add_action( 'admin_init', 'redirect_dashiboard' );
}
function redirect_dashiboard() {
  if ( '/wp-admin/index.php' == $_SERVER['SCRIPT_NAME'] ) {
    wp_redirect( admin_url( 'edit.php' ) );
  }
}

メニューの「ダッシュボード」項目を非表示にする

上で紹介したいずれかの方法でダッシュボードにアクセスすることはできなくなりますが、これだけだとメニューに「ダッシュボード」という項目が表示されていてページ移動できるように見えてしまうので、この部分を非表示にする方法です。
実装にはfunctions.phpに下記のように記述します。

functions.php

add_action( 'admin_menu', 'remove_dashiboard_menu' );
function remove_dashiboard_menu() {
  remove_menu_page( 'index.php' );
}

ただ、こちらもこのままだと全権限のユーザーに適用されてしまうので、管理者だけはそのまま項目を表示させておきたいという場合などは、先ほどと同様にis_super_admin()を用いて記述することで管理者の場合は「ダッシュボード」の項目がそのまま表示されているように実装できます。

Close the search window,
please press close button or esc key.