WordPressの管理画面では、投稿一覧や固定ページ一覧に表示される列をカスタマイズできます。今回は、「View数」、「スラッグ」、「ID」、「順序」の4つの列を表示し、それらの列でソートが可能になるようにカスタマイズしていきます。

それぞれのカスタマイズ方法を以下に示します。

View数列の追加とソート

functions.php に以下のコードを追加します。


  //記事のView数メタデータを作成・更新する
  function setPostViews() {
    $post_id = get_the_ID();
    $custom_key = 'post_views_count';
    $post_views_count = get_post_meta($post_id, $custom_key, true); //現在のビュー数を取得
    //すでにメタデータがあるかどうかで処理を分ける
    if ($post_views_count === '') {
      delete_post_meta($post_id, $custom_key);
      add_post_meta($post_id, $custom_key, '0');
    } else {
      $post_views_count++;
      update_post_meta($post_id, $custom_key, $post_views_count);
    }
  }
  add_action('wp_head', 'setPostViews');
  
  //投稿一覧と固定ページ一覧に「View数」列を追加
  function add_posts_columns_post_views_count($columns) {
    $columns['post_views_count'] = 'view数';
    echo '<style>.fixed .column-post_views_count {width:80px;}</style>';
    return $columns;
  }
  add_filter('manage_posts_columns', 'add_posts_columns_post_views_count');
  add_filter('manage_pages_columns', 'add_posts_columns_post_views_count');
  
  //記事のView数を表示する
  function custom_posts_columns_post_views_count($column_name, $post_id) {
    if ('post_views_count' == $column_name) {
      $post_id = $post_id ? $post_id : get_the_ID();
      $custom_key = 'post_views_count';
      $post_views_count = get_post_meta($post_id, $custom_key, true);
      if ($post_views_count === '') {
        //まだメタデータが存在していなければ
        delete_post_meta($post_id, $custom_key);
        add_post_meta($post_id, $custom_key, '0');
        $post_views_count = 0;
      }
      echo $post_views_count;
    }
  }
  add_action('manage_posts_custom_column', 'custom_posts_columns_post_views_count', 10, 2);
  add_action('manage_pages_custom_column', 'custom_posts_columns_post_views_count', 10, 2);
  
  //ソート可能にする
  function sort_posts_columns_post_views_count($columns) {
    $columns['post_views_count'] = 'post_views_count';
    return $columns;
  }
  add_filter('manage_edit-post_sortable_columns', 'sort_posts_columns_post_views_count');
  add_filter('manage_edit-page_sortable_columns', 'sort_posts_columns_post_views_count');  
  

スラッグ列の追加とソート

functions.php に以下のコードを追加します。


//記事のView数メタデータを作成・更新する
function setPostViews() {
  $post_id = get_the_ID();
  $custom_key = 'post_views_count';
  $post_views_count = get_post_meta($post_id, $custom_key, true); //現在のビュー数を取得
  //すでにメタデータがあるかどうかで処理を分ける
  if ($post_views_count === '') {
    delete_post_meta($post_id, $custom_key);
    add_post_meta($post_id, $custom_key, '0');
  } else {
    $post_views_count++;
    update_post_meta($post_id, $custom_key, $post_views_count);
  }
}
add_action('wp_head', 'setPostViews');

//投稿一覧と固定ページ一覧に「View数」列を追加
function add_posts_columns_post_views_count($columns) {
  $columns['post_views_count'] = 'view数';
  echo '';
  return $columns;
}
add_filter('manage_posts_columns', 'add_posts_columns_post_views_count');
add_filter('manage_pages_columns', 'add_posts_columns_post_views_count');

//記事のView数を表示する
function custom_posts_columns_post_views_count($column_name, $post_id) {
  if ('post_views_count' == $column_name) {
    $post_id = $post_id ? $post_id : get_the_ID();
    $custom_key = 'post_views_count';
    $post_views_count = get_post_meta($post_id, $custom_key, true);
    if ($post_views_count === '') {
      //まだメタデータが存在していなければ
      delete_post_meta($post_id, $custom_key);
      add_post_meta($post_id, $custom_key, '0');
      $post_views_count = 0;
    }
    echo $post_views_count;
  }
}
add_action('manage_posts_custom_column', 'custom_posts_columns_post_views_count', 10, 2);
add_action('manage_pages_custom_column', 'custom_posts_columns_post_views_count', 10, 2);

//ソート可能にする
function sort_posts_columns_post_views_count($columns) {
  $columns['post_views_count'] = 'post_views_count';
  return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'sort_posts_columns_post_views_count');
add_filter('manage_edit-page_sortable_columns', 'sort_posts_columns_post_views_count');

スラッグ列の追加とソート

functions.php に以下のコードを追加します。


/* 投稿一覧と固定ページ一覧にスラッグ列を追加 */
function add_post_page_column_title($columns) {
  $columns['slug'] = 'スラッグ';
  echo '';
  return $columns;
}
add_filter('manage_posts_columns', 'add_post_page_column_title');
add_filter('manage_pages_columns', 'add_post_page_column_title');

function add_post_page_column($column_name, $post_id) {
  if ($column_name == 'slug') {
    $post = get_post($post_id);
    $slug = $post->post_name;
    echo esc_attr($slug);
  }
}
add_action('manage_posts_custom_column', 'add_post_page_column', 10, 2);
add_action('manage_pages_custom_column', 'add_post_page_column', 10, 2);

// スラッグ列のソート
function add_slug_sortable_column( $columns ) {
    $columns['slug'] = 'slug';
    return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'add_slug_sortable_column');
add_filter('manage_edit-page_sortable_columns', 'add_slug_sortable_column');

ID列の追加とソート

functions.php に以下のコードを追加します。


/* 投稿一覧と固定ページ一覧にID列を追加 */
function add_post_id_column_title($columns) {
  $columns['post_id'] = 'ID';
  echo '';
  return $columns;
}
add_filter('manage_posts_columns', 'add_post_id_column_title');
add_filter('manage_pages_columns', 'add_post_id_column_title');

function add_post_id_column($column_name, $post_id) {
  if ($column_name == 'post_id') {
    echo $post_id;
  }
}
add_action('manage_posts_custom_column', 'add_post_id_column', 10, 2);
add_action('manage_pages_custom_column', 'add_post_id_column', 10, 2);

// ID列のソート
function add_post_id_sortable_column( $columns ) {
    $columns['post_id'] = 'ID';
    return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'add_post_id_sortable_column');
add_filter('manage_edit-page_sortable_columns', 'add_post_id_sortable_column');  

順序列の追加とソート

functions.php に以下のコードを追加します。


/* 投稿一覧と固定ページ一覧に「順序」列を追加 */
function add_menu_order_column($columns) {
  $columns['menu_order'] = '順序';
  echo '';
  return $columns;
}
add_filter('manage_edit-page_columns', 'add_menu_order_column');
add_filter('manage_posts_columns', 'add_menu_order_column');

//「順序」の値を表示
function show_menu_order_column($name, $post_id) {
  if ('menu_order' == $name) {
    $order = get_post_field('menu_order', $post_id);
    echo $order;
  }
}
add_action('manage_pages_custom_column', 'show_menu_order_column', 10, 2);
add_action('manage_posts_custom_column', 'show_menu_order_column', 10, 2);

//ソート可能にする
function sort_menu_order_column($columns) {
  $columns['menu_order'] = 'menu_order';
  return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'sort_menu_order_column');
add_filter('manage_edit-page_sortable_columns', 'sort_menu_order_column');

上記のコードを functions.php に追加することで、「View数」、「スラッグ」、「ID」、「順序」の4つの列が投稿一覧と固定ページ一覧に追加され、各列でソートができるようになります。なお、各列のソート機能は、それぞれの列のヘッダーをクリックすることで動作します。