[wordpress] 管理画面でカスタム投稿タイプの一覧を「順序」でソートできるようにする
wordpressでカスタム投稿タイプを作ると、一覧を表示したときの画面が殺風景です。タイトルと日時しか入っていません。
ここに「順序」を追加して、ソートできるようにしたいと思います。
一応、始める前に準備が必要です。カスタム投稿タイプを作成するときに「register_post_type」を実行しますが、その「supports」の中で「page-attributes」を指定しておきます。これにより、カスタム投稿の記事作成画面で「属性⇒順序」が表示されるようになります。次の公式サイトを参照してください。
関数リファレンス/register post type - WordPress Codex 日本語版
さて、この「順序」を使って、一覧画面からソートできるようにしたいと思います。手順は、「順序」のカラムを作る、「順序」の値を表示する、「順序」でソートできるようにする、の3段階です。完成すると、次のような表示になります。
「順序」のカラムを作る
管理画面のカスタム投稿一覧でカラムを表示するためには、テーマの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' );
こうすると、作成者やカテゴリーでもソートできるようになります。