2016/01/25

[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' );

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

前の記事:
次の記事: