2. 3 ダッシュボードのカスタマイズ

ウィジェットの非表示・追加

ウィジェットの非表示・追加

 ダッシュボードの次のウィジェットを非表示にします。
  ・概要
  ・アクティビティ
  ・クイックドラフト
  ・WordPress ニュース(管理者以外)
  ・「ようこそ」
 次のウィジェットを追加します。
  ・最近の投稿(投稿と固定ページ)
  ・承認待ち(管理者・編集者)
 「承認待ち」には、承認機能があります。

コード

// --------------------------------
// ウィジェットの非表示・追加
// --------------------------------
function hk_functions_dashboard_widget() {
    remove_meta_box( 'dashboard_right_now',   'dashboard', 'normal' );   // 概要
    remove_meta_box( 'dashboard_activity',    'dashboard', 'normal' );   // アクティビティ
    remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );     // クイックドラフト
    remove_action( 'welcome_panel', 'wp_welcome_panel' );                // 「ようこそ」
    // 管理者以外
    if ( ! current_user_can('administrator') )
        remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );     // WordPress ニュース
    // 管理者・編集者 「承認待ち」追加
    if (( current_user_can('administrator') ) || ( current_user_can('editor') ))
        wp_add_dashboard_widget( 'hk_functions_dashboard_pending', '承認待ち', 'hk_functions_dashboard_pending' );
    // 「最近の投稿」追加
    wp_add_dashboard_widget( 'hk_functions_dashboard_activity', '最近の投稿', 'hk_functions_dashboard_activity' );
    return;
}
add_action( 'wp_dashboard_setup', 'hk_functions_dashboard_widget' );

// 最近の投稿
function hk_functions_dashboard_activity() {
    global $post;
    $user_id = get_current_user_id();
    $query_args = array(
        'post_type'      => array( 'post', 'page' ),
        'orderby'        => 'modified',
        'order'          => 'DESC',
        'posts_per_page' => 10,
        'author'         => $user_id,
    );
    $posts = new WP_Query( $query_args );
    if ( $posts->have_posts() ) {
        echo '<div class="hk_dashboard">'."\n";
        echo '<table>'."\n";
        echo '  <tbody>'."\n";
        echo '    <tr>'."\n";
        echo '      <th class="hk_nowrap">日付</th>'."\n";
        echo '      <th class="hk_nowrap">状態</th>'."\n";
        echo '      <th>タイトル</th>'."\n";
        echo '    </tr>'."\n";
        while ( $posts->have_posts() ) {
            $posts->the_post();
            // 更新日
            $modified_date  = get_the_modified_date('Y/m/d');
            $modified_dates = explode( '/', $modified_date );
            $modified_date  = $modified_dates[0].'年'.$modified_dates[1].'月'.$modified_dates[2].'日';
            // タイトル
            if ( isset( $post->post_title ) ) {
                $post_title = $post->post_title;
                if ( $post_title == '' )    $post_title = '(タイトルなし)';
            }
            else    $post_title = '(タイトルなし)';
            $post_title = htmlspecialchars( $post_title );
            // 状態
            $post_status = $post->post_status;
            if ( $post_status == 'publish' )        $post_status = '公開中';
            else if ( $post_status == 'pending' )   $post_status = '承認待';
            else if ( $post_status == 'draft' )     $post_status = '下書き';
            else if ( $post_status == 'future' )    $post_status = '公開待';
            else if ( $post_status == 'private' )   $post_status = '非公開';
            else                                    $post_status = '   ';
            echo '    <tr>'."\n";
            echo '      <td class="hk_nowrap">'.$modified_date.'</td>'."\n";
            echo '      <td class="hk_nowrap">'.$post_status.'</td>'."\n";
            echo '      <td>'.$post_title.'</td>'."\n";
            echo '    </tr>'."\n";
        }
        echo '  </tbody>'."\n";
        echo '</table>'."\n";
        echo '</div><!-- hk_dashboard -->'."\n";
        wp_reset_postdata();
    }
    else {
        echo '<div class="no-activity">'."\n";
        echo '  <p>投稿がありません。</p>'."\n";
        echo '</div>'."\n";
    }
    return;
}

// 承認待ち
function hk_functions_dashboard_pending() {
    global $post;
    // 承認処理
    if ( isset( $_REQUEST['hk_approve'] ) ) {
        $post_id = $_REQUEST['hk_approve'];
        $approve = array(
            'ID'          => $post_id,
            'post_status' => 'publish',
        );
        // 投稿を更新
        wp_update_post( $approve );
        echo '<p>承認しました。</p>'."\n";
    }
    // 承認待ち取得
    $query_args = array(
        'post_type'      => array( 'post', 'page' ),
        'post_status'    => 'pending',
        'orderby'        => 'modified',
        'order'          => 'DESC',
        'posts_per_page' => -1,
    );
    $posts = new WP_Query( $query_args );
    if ( $posts->have_posts() ) {
        echo '<div class="hk_dashboard">'."\n";
        echo '<table>'."\n";
        echo '  <tbody>'."\n";
        echo '    <tr>'."\n";
        echo '      <th class="hk_nowrap">日付</th>'."\n";
        echo '      <th class="hk_nowrap">作成者</th>'."\n";
        echo '      <th>タイトル</th>'."\n";
        echo '    </tr>'."\n";
        while ( $posts->have_posts() ) {
            $posts->the_post();
            $post_id = $post->ID;
            // 更新日
            $modified_date  = get_the_modified_date('Y/m/d');
            $modified_dates = explode( '/', $modified_date );
            $modified_date  = $modified_dates[0].'年'.$modified_dates[1].'月'.$modified_dates[2].'日';
            // 作成者
            $author_id  = $post->post_author;
            $author_obj = get_userdata( $author_id );
            $author = $author_obj->last_name.' '.$author_obj->first_name;
            // タイトル
            if ( isset( $post->post_title ) ) {
                $post_title = $post->post_title;
                if ( $post_title == '' )    $post_title = '(タイトルなし)';
            }
            else    $post_title = '(タイトルなし)';
            $post_title = htmlspecialchars( $post_title );
            // 承認リンク
            $approve_url = 'index.php?hk_approve='.$post_id;
            $approve_url = admin_url( $approve_url );
            $approve_str = '<a title="この項目を承認する" href="'.$approve_url.'">承認</a>';
            // 表示リンク
            $display_str = '<a title="この項目を表示する" href="'.get_permalink().'" target="_blank">表示</a>';
            // 表示
            echo '    <tr>'."\n";
            echo '      <td class="hk_nowrap">'.$modified_date.'</td>'."\n";
            echo '      <td class="hk_nowrap">'.$author.'</td>'."\n";
            echo '      <td>'.$post_title.'<br />'.$approve_str.' '.$display_str."</td>\n";
            echo '    </tr>'."\n";
        }
        echo '  </tbody>'."\n";
        echo '</table>'."\n";
        echo '</div><!-- hk_dashboard -->'."\n";
        wp_reset_postdata();
    }
    else {
        echo '<div class="no-activity">'."\n";
        echo '  <p>承認待ちはありません。</p>'."\n";
        echo '</div>'."\n";
    }
    return;
}

 このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。

更新日:2016/03/19
掲載日:2016/03/19