WordPress: 投稿一覧ページにカスタムメタデータを表示する方法

WordPressで投稿一覧ページにカスタムメタデータを表示する方法です。

下の画像のカテゴリーやタグなどと同様に、列の形で表示します。

目的

今回は、’my_meta’ というキー名のカスタムメタデータを表示します。列名は ‘マイメタ’ にします。

手順

簡単な様に見えて複雑で、次の4ステップを踏みます。

  • manage_posts_columns フィルタで、新しいカスタム列を追加します。
  • manage_posts_custom_column アクションで、カスタム列に値を入れます。
  • manage_edit-post_sortable_columns フィルタで、カスタム列をソート対象に含めます。
  • request フィルタでソートリクエストを調整します。

Step1. 新しい列を追加します

manage_posts_columns フィルタで、新しい列を追加します。

‘my_meta’ というキー名のメタデータを、’マイメタ’という列名表示で登録しました。

function my_manage_posts_columns( $columns ) {
$columns = array_merge( $columns, array(
'my_meta' => 'マイメタ'
));
return $columns;
}
add_filter( 'manage_posts_columns', 'my_manage_posts_columns' );

フィルタなのでreturnを忘れずに。

Step2. 作った列に値を入れます

manage_posts_custom_column アクションで、カスタム列に値を入れます。

作った列が表示される段階になったら、echo でカスタムメタデータを返してあげます。

function my_manage_posts_custom_column( $column_name, $post_id ) {
switch ( $column_name ) {
case 'my_meta':
echo get_post_meta( $post_id, 'my_meta', true );
break;
}
}
add_action( 'manage_posts_custom_column', 'my_manage_posts_custom_column', 10, 2 );

ここまでで、カスタムメタデータは投稿一覧画面に表示されます。

Step3. 作った列にソート対象に含めます。(オプショナル)

この段階では、作った列はソートができないはずです。ソートが不要なら以降は不要です。

manage_edit-post_sortable_columns フィルタで、カスタム列をソート対象に含めます。

‘my_meta’ キーを $sortable_columns に追加します。

function my_manage_edit_post_sortable_columns( $sortable_columns ) {
$sortable_columns = array_merge( $sortable_columns, array(
'my_meta' => 'my_meta'
));
return $sortable_columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'my_manage_edit_post_sortable_columns' );

まだ、ソートはできません。次が最後です。

Step4. ソートリクエストを調整します。(オプショナル)

request フィルタでソートリクエストを調整します。

カスタムメタデータでソートするには、WP_Query()の’meta_key’と’orderby’オプションをカスタムメタデータ用に調整する必要があります。これは次のようにします。

function my_request( $vars ) {
if ( isset( $vars['orderby'] ) ) {
switch( $vars['orderby'] ) {
case 'my_meta':
$vars = array_merge( $vars, array(
'meta_key' => 'my_meta',
'orderby' => 'meta_value_num'
) );
break;
}
}
return $vars;
}
add_filter( 'request', 'my_request' );

‘meta_key’ にはカスタムメタキーを入れます。

‘orderby’ は、数字でソートするなら ‘meta_value_num’、文字列でソートするなら ‘meta_value’ となります。

終わりに

これで投稿一覧画面にソート可能なカスタムメタデータが表示されたかと思います。

参考サイト

長かったですが、以上です。