ダッシュボードの初期ウィジェットを削除したい

仕事でWordPressの管理画面をシステムちっくな仕様で実装することが増えてきてまして。そこでダッシュボードにグラフや最新記事を掲載してほしいなど色々要望をいただくことが多く、その際にダッシュボードのカスタマイズをするわけで。

まずはダッシュボードのデフォルトウィジェットの削除の方から。以下のソースコードをfunctions.phpに記述します。

function remove_dashboard_widgets() {
  // サイトヘルスステータス
  remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' );

  // 概要
  remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' );

  // アクティビティ
  remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );

  // クイックドラフト
  remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );

  // WordPress イベントとニュース
  remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );

  // ようこそ
  remove_action( 'welcome_panel', 'wp_welcome_panel' );
}
add_action( 'wp_dashboard_setup', 'remove_dashboard_widgets' );

表示オプションからもちゃんとチェック項目がなくなります。

ダッシュボードに独自ウィジェットを追加する

次にダッシュボードに独自のウィジェットを追加表示してみます。カスタマイズで記事の更新状況を表示するウィジェットを作りたかったので合わせて作ってみる。

function add_dashboard_widgets() {
  wp_add_dashboard_widget(
    'ex_post_dashboard_widget',  // ウィジェットのスラッグ
    '記事の更新情報',             // ウィジェットのタイトル
    'ex_post_dashboard_widget'   // ウィジェットの内容を出力するコールバック関数
  );
}
function ex_post_dashboard_widget() {
  $args = [
    'post_type'      => 'post',
    'posts_per_page' => 5,
    'orderby'        => 'modified',
    'order'          => 'DESC'
  ];
  $query = new WP_Query( $args );

  if ( $query->have_posts() ) :
    echo '<ul>';
    while( $query->have_posts() ) :
      $query->the_post();
      echo '<li>';
      echo '<time>';
      echo get_the_modified_date( 'Y.m.d' ) . ' ';
      echo get_the_modified_time( 'h:i:s' ) . ' ';
      echo '</time>';
      echo '<a href="' . get_the_permalink() . '">' . get_the_title() . '</a>';
      echo '</li>';
    endwhile;
    echo '</ul>';
  endif; wp_reset_postdata();
}
add_action( 'wp_dashboard_setup', 'add_dashboard_widgets' );

フックポイントは、ウィジェットの削除と同じくwp_dashboard_setupで行います。コールバック関数add_dashboard_widgets()で、ダッシュボードにウィジェットを追加する関数wp_add_dashboard_widget()を実行します。このコードを実行すると…

ダッシュボードにウィジェット追加

できた!\(^o^)/
見事追加されました。短いコードで手軽に追加できるのもWordPressの良いところ。

参考サイト

Developer Resources: remove_action()
https://developer.wordpress.org/reference/functions/remove_action/
Developer Resources: remove_meta_box()
https://developer.wordpress.org/reference/functions/remove_meta_box/
Developer Resources: wp_add_dashboard_widget()
https://developer.wordpress.org/reference/functions/wp_add_dashboard_widget/
Developer Resources: class WP_Query {}
https://developer.wordpress.org/reference/classes/wp_query/