前に「WordPress 7.0でプラグインが壊れる箇所」を書きました。その中で、いちばん影響が大きいのが、投稿一覧が従来のWP_List_TableからReact製のDataViewsに置き換わったことでした。今回は、その続きです。「壊れた」の次、「じゃあ7.0で自分のカスタムカラムをどう出すか」の実装を書きます。
先に答えを書きます。DataViewsはReactでできていて、サーバー側のPHPが組んだテーブルを描くわけではありません。だから、従来の manage_posts_columns でHTMLを足す発想では届きません。7.0でやることは、見せたいデータをREST API経由で読める形にして、React側のグリッドに拾わせる、です。要は「HTMLを足す」から「データを公開する」へ、考え方が変わります。(2026年7月時点。最終的には公式のフィールドガイドで確認してください)
従来のやり方が、なぜ効かないのか
6.x までは、こう書いていました。
// WordPress 6.x:フックでカラムを足し、PHPでセルのHTMLを出す
add_filter('manage_post_posts_columns', function ($cols) {
$cols['my_score'] = 'スコア';
return $cols;
});
add_action('manage_post_posts_custom_column', function ($col, $post_id) {
if ($col === 'my_score') {
echo esc_html(get_post_meta($post_id, 'my_score', true));
}
}, 10, 2);
7.0の一覧はReactで描かれるので、この「PHPでセルのHTMLを出す」部分が、そのままは効きません。DataViewsは、データをREST APIから取ってきて、ブラウザ側でカラムやフィルタを組み立てます。つまり、まずデータがREST経由で見えていないと、React側はそのカラムを作れません。
手順1:メタをREST APIに公開する
いちばん大事な一歩です。見せたいメタを register_post_meta で登録するとき、show_in_rest => true を付けます。これで、React製のグリッドがそのメタを読めるようになります。
add_action('init', function () {
register_post_meta('post', 'my_score', [
'show_in_rest' => true, // これが無いとDataViewsから見えない
'single' => true,
'type' => 'number',
'auth_callback' => function () {
return current_user_can('edit_posts');
},
]);
});
show_in_rest が抜けていると、いくらReact側でカラムを足そうとしても、データが来ないので出ません。7.0でカスタムカラムが出ない、の多くは、まずここです。
手順2:Field APIで、見せ方を宣言する
7.0では、Field APIが広がって、カラムの見せ方を宣言的に書けるようになりました。以前は独自のReactコンポーネントを書かないと、通貨やファイルサイズの整形ができませんでしたが、format や getValueFormatted で、コンポーネントを触らずに表示を整えられます。
// 例:数値スコアを、そのまま出すのではなく整形して見せる
const field = {
id: 'my_score',
label: 'スコア',
getValueFormatted: ({ item }) => `${item.my_score ?? 0} 点`,
};
大きな選択肢リストを出すときは、7.0で入った adaptiveSelect が、要素が増えると自動でコンボボックスに切り替わります。数千件のDOMでブラウザが固まるのを防いでくれるので、フィルタUIを自前で作り込む前に、こちらを見ておくと楽です。
手順3:グループ化は groupBy オブジェクトで
6.9まで文字列だった groupByField は、7.0で groupBy オブジェクトに変わりました。ここは、旧コードのままだと動かない定番です。
// ❌ 6.9まで(動かない)
const view = { groupByField: 'status' };
// ✅ 7.0
const view = {
groupBy: { field: 'status', direction: 'desc', showLabel: true },
};
確認:カラムが出ないときに見る順番
DataViewsでカスタムカラムが出ないときは、この順で切り分けます。
まず、メタがRESTに出ているか。/wp-json/wp/v2/posts を叩いて、自分のメタキーが meta に含まれているかを見ます。ここに無ければ、原因は show_in_rest です。React側の問題ではありません。
次に、権限。auth_callback や、メタの公開範囲で弾かれていないか。ログインユーザーの権限で見えているかを確かめます。
最後に、React側のフィールド登録。データはRESTに出ているのに一覧に出ないなら、フィールドの登録側(id がメタキーと一致しているか等)を見ます。
データが先、表示は後。この順で見ると、たいてい早く切り分けられます。
早見でまとめ
- 7.0の一覧はReact製。PHPでセルのHTMLを出す従来のやり方は、そのままは効かない
- 見せたいメタは
register_post_metaにshow_in_rest => trueを付けて公開する - 見せ方は Field API の
format/getValueFormattedで宣言的に。独自コンポーネントは要らない - 大きな選択肢は
adaptiveSelect、グループ化はgroupByオブジェクト(旧groupByFieldは不可) - 出ないときは「RESTに出ているか → 権限 → フィールド登録」の順で切り分ける
7.0のDataViewsは、慣れるまでは面倒に見えます。ただ、考え方が「HTMLを足す」から「データを公開して、見せ方を宣言する」に変わっただけ、と分かると、意外と素直でした。役に立ったらストックして、7.0対応でカラムを出すとき見返してください。
参考(公式):
- WordPress 7.0 Field Guide: https://make.wordpress.org/core/2026/05/14/wordpress-7-0-field-guide/
- Using Data Views in plugins(Developer Blog): https://developer.wordpress.org/news/2024/08/using-data-views-to-display-and-interact-with-data-in-plugins/
ふだんはraplsworks.comで、WordPressプラグイン開発やClaude Codeまわりのことを書いています。