WordPress の管理画面でカスタム投稿タイプを使用する際、特定の値をラベルに変換したり、IDを実際のデータに置き換えて表示したいことがあります。この記事では、Admin Columns プラグインの ac/column/value
フィルターを使用して、カスタム列の値をカスタマイズする方法を解説します。
実装するカスタマイズ内容
- 特定の値をラベルに変換: 例えば、
alpha
をカテゴリA
に変換。 - 特定のカスタム投稿タイプと列のヘッダーラベルに応じて値を変更:
custom_post_type
というカスタム投稿タイプの「項目名」列で、IDを実際のデータに変換して表示。
実装コード
以下のコードを functions.php
に追加することで、管理画面のリスト表示をカスタマイズできます。
function cf_custom_column_value( $value, $id, $column ) {
// カスタム投稿タイプを取得
$r_post_type = $column->get_post_type();
// 列のヘッダーラベルを取得
$column_label = $column->get_option('label');
// 変換したい値と対応するラベルの配列
$labels = array(
'alpha' => 'カテゴリA',
'beta' => 'カテゴリB',
'gamma' => 'カテゴリC',
'status1' => '承認済み',
'status2' => '保留',
);
// 配列内の値をラベルに変換
if ( array_key_exists( $value, $labels ) ) {
$value = $labels[ $value ];
}
// 特定のカスタム投稿タイプの「項目名」列の値を変換
if ( $r_post_type == 'custom_post_type' && $column_label == '項目名' ) {
$custom_value = get_post_meta( $value, 'custom_field', true );
$value = $custom_value;
}
return $value;
}
add_filter( 'ac/column/value', 'cf_custom_column_value', 10, 3 );
コードの説明
- カスタム投稿タイプの取得
$r_post_type = $column->get_post_type();
$column->get_post_type()
を使って、現在表示されている投稿タイプを取得。
- 列のヘッダーラベルを取得
$column_label = $column->get_option('label');
$column->get_option('label')
を使用して、現在の列のラベル(表示名)を取得。
- 特定の値をラベルに変換
$labels = array( 'alpha' => 'カテゴリA', 'beta' => 'カテゴリB', 'gamma' => 'カテゴリC', 'status1' => '承認済み', 'status2' => '保留', ); if ( array_key_exists( $value, $labels ) ) { $value = $labels[ $value ]; }
- 配列
$labels
に変換したいキーとラベルを設定。 array_key_exists()
で値が配列内にあるか確認し、変換。
- 配列
- カスタム投稿タイプ
custom_post_type
の「項目名」列の値を変換if ( $r_post_type == 'custom_post_type' && $column_label == '項目名' ) { $custom_value = get_post_meta( $value, 'custom_field', true ); $value = $custom_value; }
- カスタム投稿タイプ
custom_post_type
で「項目名」列だった場合に実行。 $value
が投稿 ID であるため、get_post_meta()
でカスタムフィールドcustom_field
から実際のデータを取得して表示。
- カスタム投稿タイプ
まとめ
この方法を使えば、カスタム投稿タイプや特定の列に応じて、表示を柔軟に変更できます。管理画面をより見やすくするために、ぜひ活用してみてください!
さらにカスタマイズを行う場合
get_value()
を利用して他のカラムのデータを取得- 条件分岐を追加して、さらに細かくカスタマイズ
管理画面をより便利にするために、Admin Columns のフィルターを活用しましょう!
コメント