「1つのカスタム投稿タイプにカスタムフィールドを表示する」のは簡単なんですが、「複数のカスタム投稿にそれぞれでしか使用しないカスタムフィールドを表示する」のがなかなかうまくいかず、手こずったので備忘録として。
前提条件
- カスタム投稿タイプ「news」「topics」の2つ
- 「news」で使用しているカスタムフィールドは「StartData」
- 「topics」で使用しているカスタムフィールドは「EndData」
やりたいこと
管理画面において
「news」の記事一覧には「StartData」のカラムを表示し、
「topics」の記事一覧には「EndData」のカラムを表示したい
まず「news」の場合
1つだけでしたら簡単です。
function add_column($column_name, $post_id) { if( $column_name == 'StartData' ) { echo attribute_escape(get_post_meta($post_id, 'StartData', true)); } } function manage_posts_columns($columns) { $columns['StartData'] = "スタート"; return $columns; } add_action( 'manage_news_posts_custom_column', 'add_column', 10, 2 ); add_filter( 'manage_news_posts_columns', 'manage_posts_columns' );
続いて「topics」の場合(失敗バージョン)
まず失敗した書き方を載せます。
成功バージョンだけ見たい人は飛ばしてください。
上の「news」の場合の記述に「topics」分を追加してみました。
function add_column($column_name, $post_id) { if( $column_name == 'StartData' ) { echo attribute_escape(get_post_meta($post_id, 'StartData', true)); } elseif( $column_name == EndData' ) { echo attribute_escape(get_post_meta($post_id, 'EndData', true)); } } function manage_posts_columns($columns) { $columns['StartData'] = "スタート"; $columns['EndData'] = "エンド"; return $columns; } add_action( 'manage_news_posts_custom_column', 'add_column', 10, 2 ); add_filter( 'manage_news_posts_columns', 'manage_posts_columns' ); add_action( 'manage_topics_posts_custom_column', 'add_column', 10, 2 ); add_filter( 'manage_topics_posts_columns', 'manage_posts_columns' );
これだと「news」「topics」両方の記事一覧に「StartData」「EndData」のカラムが出てしまいました。
かと言って別々に書くとエラーになります。
function add_column($column_name, $post_id) { if( $column_name == 'StartData' ) { echo attribute_escape(get_post_meta($post_id, 'StartData', true)); } } function manage_posts_columns($columns) { $columns['StartData'] = "スタート"; return $columns; } add_action( 'manage_news_posts_custom_column', 'add_column', 10, 2 ); add_filter( 'manage_news_posts_columns', 'manage_posts_columns' ); function add_column($column_name, $post_id) { elseif( $column_name == EndData' ) { echo attribute_escape(get_post_meta($post_id, 'EndData', true)); } } function manage_posts_columns($columns) { $columns['EndData'] = "エンド"; return $columns; } add_action( 'manage_topics_posts_custom_column', 'add_column', 10, 2 ); add_filter( 'manage_topics_posts_columns', 'manage_posts_columns' );
まぁ、actionの’add_column’とfilterの’manage_posts_columns’被ってますからエラー当然です。
結論としては「ならば新しく作る」です。
「topics」の場合(成功バージョン)
add_action( 'manage_topics_posts_custom_column', 'my_add_column', 10, 2 ); function my_add_column($column_name, $post_id) { elseif( $column_name == EndData' ) { echo attribute_escape(get_post_meta($post_id, 'EndData', true)); } } add_filter( 'manage_topics_posts_columns', 'my_manage_posts_columns' ); function my_manage_posts_columns($columns) { $columns['EndData'] = "エンド"; return $columns; }
actionの’add_column’を’my_add_column’に
filterの’manage_posts_columns’を’my_manage_posts_columns’としました。
これで「news」の記事一覧には「StartData」のカラム、「topics」の記事一覧には「EndData」のカラムを表示することができました。
最近のコメント