functions.phpでWordPressのダッシュボードをシンプルにカスタマイズする方法

2014年08月04日 月曜日 10時14分

WordPress管理画面

今回はfunctions.phpを使ってのWordPress管理画面のカスタマイズ方法備忘録。

異動によりweb部門も兼務する事になって早4ヶ月。
お陰様で、途中から俺がメインで開発した某大手組織の新HPがカットオーバーになりました。
デザインは既に完成していて、CSSコーティング、メールマガジンの設定、スマホサイトなどをメインに仕事したんですが、俺が苦労したのは閲覧者には見えない裏の部分でした。

それは、WordPress管理画面のカスタマイズです。
WordPressはユーザーを権限別に分けて機能を制限する事が出来ます。
管理者、編集者、投稿者、寄稿者、購読者の5種類で、何でも出来る管理者から何にも出来ない購読者まで、各段階に渡って機能が制限されていきます。

が、それだけではクライアントの要望には応えきれません。
例えば、寄稿者にも画像をアップロード出来るようにして欲しいとか、ユーザー情報の編集・削除だけが出来る管理者を作って欲しいとか。

ここでは、それらの要望を実装させたfunctions.phpに記述するphpを備忘録として掲載します。

目次

ログイン画面のWordPressのロゴを変更

wordpressのロゴ

ログイン画面にはWordPressのロゴが表示されていますが、このロゴをクライアントのロゴなどに変更すればそれっぽい雰囲気になりますよね。下のコードをfunctions.phpに記述してください。

function custom_login_logo() {
  echo '<style type="text/css">h1 a { background: url('画像のURL') no-repeat center center !important; }</style>';
}
add_action('login_head', 'custom_login_logo');

サイズは274×63なので、同じ大きさで作成すればそのままロゴを差し替えることが出来ます。
ちなみに、WordPressのロゴををクリックするとWordPressの公式サイトに飛びますが、そのリンク先も変更する事が出来ます。しかし、その記述はWordPressをアップグレードすると上書きされてしまうので省略しました。

「WordPressへようこそ!」を非表示にする

WordPressへようこそ!

ダッシュボードには「WordPressへようこそ!」と言うメッセージが表示されますが、ブログを投稿するだけのクライアントさんには何の関係も無い話ですので消しましょう。
下の一行を追加するだけです。

remove_action( 'welcome_panel', 'wp_welcome_panel' );

ダッシュボードトップ画面のウィジェットを非表示にする

ダッシュボードのウィジェット

ログイン後に表示されるダッシュボードトップ画面。
そこには最近の情報や最近のコメントなどのウィジェットが表示されています。
これもクライアントさんには関係ないだけではなく、プラグインなど弄って欲しくない情報も含まれています。
消しましょう。

function example_remove_dashboard_widgets() {
  global $wp_meta_boxes;
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);   // 現在の状況(概要)
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);   // 最近のコメント
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);   // 被リンク
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);   // プラグイン
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);   // クイック投稿
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);   // 最近の下書き
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);   // WordPressブログ
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);   // WordPressフォーラム
}
add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets');

アップグレード情報を非表示にする

アップグレード情報

新しいバージョンのWordPressがリリースされると、ダッシュボードに更新を促すメッセージが表示されます。
実際にアップグレードを出来るのは管理者のみですが、それ以下の権限者には「アップグレード出来るから管理者に連絡してね」とメッセージが表示されてしまうんですね。
慣れていない寄稿者にこんなメッセージが出たら「?」ですよね。
消しましょう。

if (!current_user_can('administrator')) {
  add_filter('pre_site_transient_update_core', create_function('$a', "return null;"));
}

条件分岐について

1行目のif (!current_user_can(‘administrator’))で「管理者以外がログインした時のみ」と言う条件分岐をしてあります。
頭に「!」を付けると「この条件以外では」となるんです。
なぜ、管理者には更新情報を表示させるかというと、この表示を消してしまうとwordpressを管理画面からアップグレード出来なくなってしまうんです。

administratorは管理者の事で、他の権限者にしたい時はadministratorを下の様に変えて下さい。
なお、条件分岐が必要ない場合は、1行目の条件分岐と3行目の「}」を消せばOKです。

  • administrator(管理者)
  • editor(編集者)
  • author(投稿者)
  • contributor(寄稿者)
  • subscriber(購読者)

if (!current_user_can(‘administrator’))の「!」を取れば「管理者がログインした時は」になります。

if (current_user_can('administrator')) {

ちなみに、複数の権限者で指定したい場合は条件分岐をこんな感じに記述します。

 if (current_user_can('administrator') || current_user_can('editor')) {

管理画面上部のメニューを非表示にする

管理画面上部メニュー

管理画面の上部にはWrordPressロゴ、サイトへのリンク、更新情報、コメントなどが表示されています。
これも邪魔なので消しましょう。

add_action( 'wp_before_admin_bar_render', 'my_wp_before_admin_bar_render' );
function my_wp_before_admin_bar_render() {
  global $wp_admin_bar;
  $wp_admin_bar->remove_menu('wp-logo'); // wordpressロゴ
  $wp_admin_bar->remove_menu('site-name'); // サイト名
  $wp_admin_bar->remove_menu('updates'); // 更新
  $wp_admin_bar->remove_menu('comments'); // コメント
  $wp_admin_bar->remove_menu('new-content'); // 新規
  $wp_admin_bar->remove_menu('my-account'); // マイアカウント
}

全部消しちゃうと余りにも寂しいので、俺は下の様に記述しました。

add_action( 'wp_before_admin_bar_render', 'my_wp_before_admin_bar_render' );
function my_wp_before_admin_bar_render() {
   global $wp_admin_bar;
   $wp_admin_bar->remove_menu('wp-logo');  // wordpressロゴ
   $wp_admin_bar->remove_menu('updates');  // 更新
   $wp_admin_bar->remove_menu('comments');  // コメント
   $wp_admin_bar->remove_menu('new-content');  // 新規
   $wp_admin_bar->remove_menu('user-info');  // マイアカウント内「プロフィール」
   $wp_admin_bar->remove_menu('edit-profile');  // マイアカウント内「プロフィールを編集」
}

8行目、9行目の「user-info」「edit-profile」は、右上のユーザー名の中にある「プロフィール」と「プロフィールを編集」です。これをクリックされちゃうとユーザー情報の変更画面に飛んでしまうので消したい、けど「my-account」で右上全部を消しちゃうと、現在ログインされているユーザーのユーザー名が表示されなくなってしまうし、その中にあるログアウトボタンも非表示になってしまいます。

そんな訳で、マイアカウント自体は表示させ、その中の「user-info」「edit-profile」を非表示設定しました。

ログアウトを分りやすい所に表示させよう

ログアウトボタンを追加

function add_new_item_in_admin_bar() {
 global $wp_admin_bar;
 $wp_admin_bar->add_menu(array(
 'id' => 'new_item_in_admin_bar',
 'title' => __('ログアウト'),
 'href' => wp_logout_url()
 ));
 }
add_action('wp_before_admin_bar_render', 'add_new_item_in_admin_bar');

上記の様にWordPressのログアウトボタンはマイアカウントの中にあります。
分りにくいので、一目で分るように左上にでも表示させましょうか。
親切設計って奴ですね。

これでどこをクリックすればログアウトされるか一目瞭然ですね。

表示オプションとヘルプも非表示にしましょう

表示オプションとヘルプを非表示に

管理画面右上には表示オプションとヘルプが表示されています。
これも寄稿者には必要ないので消しましょう。

function my_admin_head(){
 echo '<style type="text/css">#contextual-help-link-wrap{display:none;}</style>';
 echo '<style type="text/css">#screen-options-link-wrap{display:none;}</style>';
 }
add_action('admin_head', 'my_admin_head');

「WordPress のご利用ありがとうございます」を消す

フッターのメッセージを消す

管理画面のフッターには「WordPress のご利用ありがとうございます」と書いてあります。
消しましょう。

function custom_admin_footer() {
 echo '&nbsp;';
 }
add_filter('admin_footer_text', 'custom_admin_footer');

今回はココまで

ぶっちゃけfunctions.phpに書かなくてもプラグインで出来るんです。
俺はphpが苦手なので、勉強になるかなと思ってfunctions.phpに書くことにしたんです。
同じ様に管理画面のカスタマイズをしたいのであれば、用途に応じたプラグインがないか探すことから始めた方が良いかもしれません。

本当は管理画面の左サイドメニューのカスタマイズも書こうと思ったけど、思いのほか長くなってしまったので別の記事として書きますね。

追記:WordPress管理画面の左サイドバーメニューをfunctions.phpで非表示設定する方法を書きました。

関連記事

コメントさんきゅ

ヒトリ茸 : 2014年12月28日 日曜日 18時03分

はじめまして

しゅん様

ヒトリ茸と申します

Recent Commentのウィジェットのカスタマイズについて調べている中で
しゅん様のサイトにたどり着きました。

しゅん様のRecent Commentはまさに理想で
どのようにすれば可能なのか、プラグイン等したべていたのですが
どうしても解らず今回コメントをさせていただきました。

もしよろしければ教えていただけないでしょうか。

しゅん様が苦労して身につけた技術を教えてくれというのは
大変無理なお願いだとは理解しているのですが
無理のない範囲でかまいませんので教えていただけると嬉しいです。

よろしくお願い致します。

しゅん : 2014年12月29日 月曜日 22時52分

こんばんわ。
俺もコメント表示が理想通り行かず苦労した記憶があります。

俺が使っているプラグインは「Commented entry list」と言う物です。
残念ながらこのプラグインの制作者はwordpress3.0以降への対応を止めてしまったらしく、現在はwpのプラグインページの新規追加で検索しても出てこないはずです。

しかし、有名な「小粋空間」さんがwordpress3.0以降に対応させたものを配布してくれています。
下記のリンクからダウンロードしてお使いください。

http://www.koikikukan.com/archives/2011/01/13-005555.php

使用方法も書いてありますが、get_recently_commented()のカッコの中に(5)などと書けば表示件数を変えることが出来ます。
あとは<li>から生成されるので、Commented entry listのタグを<ul>で括ってCSSでスタイルを付けてあげて下さい。

現在のwpは4.1ですので、このプラグインの今後が気になりますね…。
これが使えなくなっちゃったら何使えば良いんだろ?(笑)

ヒトリ茸 : 2014年12月30日 火曜日 08時50分

しゅん様

アドバイスありがとうございました

おかげさまでほぼ理想どおりにできました。

ただ、私の知識不足もあって
投稿ページは理想のカタチになったのですが
TOPページはウィジェット化でしか対応できずウィジェットのスタイルシートが適用されてしまってるのが悔しい。

投稿ページの場合は
sidebar-post.php
の一番上に

を書き込めばOKだったのですが
TOPページに表示させるには、ドコに書き込めばよいかが解らなくて現在悪戦苦闘中です。

ウィジェットのスタイルシートに統一されるのは悪いコトでは無いんですが
投稿者と日付が改行されるのが腹立たしくて(笑)

とはいえ
おかげさまで理想のrecent commentが手に入り嬉しいです。

本当にありがとうございました

しゅん : 2014年12月30日 火曜日 15時06分

あ、俺はウィジェットを一切使ってないんですよ。
sidebar.phpを作りテンプレートタグを直接記述して表示させてるんでよ。
で、テンプレートタグにより自動的に出力されたCSSにスタイルつけてる感じです。

そして、そのsidebar.phpをトップページを構成するindex.php(もしくはhome.php)に読み込んでます。

firefoxのfirebugでちょちょっと検証してみましたが、コメントの日付を囲っている<span class=”comment_date”>と、その中にあるアンカー<a>がブロック要素になってますね。
これをdisplay:inline;でインライン要素にすれば改行されなくなりますよ。
ご自身のCSSファイルに、

span.comment_date { display:inline !important; }
span.comment_date a { display:inline !important; }

で改行されなくなると思います。
多分。

ヒトリ茸 : 2014年12月30日 火曜日 16時04分

しゅん様

アドバイスありがとうございます

おかげさまで邪魔だったスタイルシートも逆に上手く適用されて
これ以上ないぐらい完璧にできました(笑)

本当に本当に助かりました。

ありがとうございます

しゅん : 2014年12月31日 水曜日 00時48分

上手く行ったようで何よりです。
では、HP運営頑張ってください!

コメントどーぞ

© 2010 - 2019 南国スキーぶろぐ