[wordpress] 管理画面でカスタム投稿タイプの一覧を「順序」でソートできるようにする

wordpressでカスタム投稿タイプを作ると、一覧を表示したときの画面が殺風景です。タイトルと日時しか入っていません。

20160125-01

ここに「順序」を追加して、ソートできるようにしたいと思います。

一応、始める前に準備が必要です。カスタム投稿タイプを作成するときに「register_post_type」を実行しますが、その「supports」の中で「page-attributes」を指定しておきます。これにより、カスタム投稿の記事作成画面で「属性⇒順序」が表示されるようになります。次の公式サイトを参照してください。

関数リファレンス/register post type - WordPress Codex 日本語版

さて、この「順序」を使って、一覧画面からソートできるようにしたいと思います。手順は、「順序」のカラムを作る、「順序」の値を表示する、「順序」でソートできるようにする、の3段階です。完成すると、次のような表示になります。

20160125-02

「順序」のカラムを作る

管理画面のカスタム投稿一覧でカラムを表示するためには、テーマのfunctions.phpに次を追加します。

function add_order_column( $columns ) {
  $columns['menu_order'] = '順序';
  return $columns;
}
add_filter( 'manage_edit-POSTTYPE_columns', 'add_order_column' );

「POSTTYPE」には、投稿タイプの名前を設定します。仮に、add_filterの第一引数を「manage_edit-post_columns」とすれば、投稿一覧に「順序」というカラムが表示されます。また、「add_order_column」というのは、適当に変えてもかまいません。変更するときは2か所とも変更します。

上により、「順序」という名前のカラムが追加されます。$columnsにはカラムの情報が入っていて、そこに付けたすという感じですね。さらに追加したければ、「順序」の追加と同じようにすればいいだけです。「menu_order」のところは、htmlのid名になります。

カラムができたので、次は値を表示してみます。

「順序」の値を表示する

管理画面のカスタム投稿一覧で「順序」カラムを作成したので、今度は各記事の「順序」を表示するようにしてみましょう。

function display_order_value( $column_name, $post_id ) {
  if ( $column_name == 'menu_order' ) {
    echo get_post_field( 'menu_order', $post_id );
  }
}
add_action( 'manage_posts_custom_column', 'display_order_value', 10, 2 );

ここでは、get_post_fieldを使って、カスタム投稿一覧の「menu_order」という名前のカラムに対し、その記事に設定されている「順序」をとってきて表示する、というのを実行しています。

実を言うと、値を表示しなくてもソートをすることはできるのですが、値はやっぱりあったほうがいいと思うんですよね。ということで、表示してみました。次はこれをソートできるようにします。

「順序」でソートできるようにする

さて、管理画面のカスタム投稿一覧で、「順序」カラムを追加して値の表示までできるようになりました。次に、ソートできるようにします。

function make_order_column_sortable( $columns ) {
  $columns['menu_order'] = 'menu_order';
  return $columns;
}
add_filter( 'manage_edit-POSTTYPE_sortable_columns', 'make_order_column_sortable' );

「POSTTYPE」は、投稿タイプの名前を指定します。上のように「menu_order」を指定すれば、「順序」でソートできるようになります。これで完成です。

ちなみに、「POSTTYPE」に「post」を入れると、「投稿一覧」画面に新しくソートできる機能を追加することができます。変な例ですが、例えば次のようにしてみます。

function make_author_categories_column_sortable( $columns ) {
    $columns['author'] = 'author';
    $columns['categories'] = 'categories';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'make_author_categories_column_sortable' );

こうすると、作成者やカテゴリーでもソートできるようになります。

前の記事:
vagrant upするとHostsUpdaterで権限エラーが出るときの対応
次の記事:
[ VBA ] 指定フォルダ以下の全フォルダに含まれるファイルの一覧を取得したい