デフォルトの投稿タイプには『投稿』『固定ページ』がありますが、カスタマイズしたいことがあります。たとえば投稿タイプで親子関係を使いたいとか、固定ページでタグを使いたいとか。
やり方はかんたんです。カスタマイズ用の関数やフィルターが用意されています。
(もちろんカスタム投稿タイプでも使える。)
投稿とはデータベースの wp_posts のデータのことで、デフォルトでは『投稿』『固定ページ』があります。じつは画像もそのひとつで、データベース上は wp_posts に入っている。
これを見ても分かるように、投稿と固定ページ、画像は同じデータで扱われながら性格が違います。
投稿ページはカテゴリ・タグは使えるけど投稿同士の親子関係はない。
固定ページは投稿同士の親子関係はあるけどカテゴリ・タグが使えない。
画像は見た目からして投稿・固定ページとまったく違う。
その性格が『投稿タイプ』と呼ばれるもの。
wp_posts のデータはデータタイプの登録で性格を決めます。そしてその性格を後で変えることもできます。
具体的な例で性格を変えてみましょう。
投稿に親子関係を持たせる
まずはデフォルトの投稿の性格に投稿同士の親子関係を持たせましょう。最初に、投稿の性格を決める投稿タイプの登録処理を確認します。
register_post_type(
'post',
array(
'labels' => array(
'name_admin_bar' => _x( 'Post', 'add new from admin bar' ),
),
'public' => true,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'_edit_link' => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
'capability_type' => 'post',
'map_meta_cap' => true,
'menu_position' => 5,
'hierarchical' => false,
'rewrite' => false,
'query_var' => false,
'delete_with_user' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
'show_in_rest' => true,
'rest_base' => 'posts',
'rest_controller_class' => 'WP_REST_Posts_Controller',
)
);
'hierarchical' が false になっていますね? これを true に変えるだけでOK。そしてここの値を変えるフィルターが用意されているので変更はかんたん。
add_filter('register_post_type_args', function( $args, $post_type ) {
if ( $post_type === 'post' ){
$args['hierarchical'] = true;
}
return $args;
}, 10, 2);
と、行きたいところですが、デフォルトの投稿は階層化ができません。とんでもない動きをします。
例がいけませんでした。でもこのフィルターは、投稿タイプの名称以外のパラメータをあとで変更できます。
自分で作ったカスタム投稿タイプは登録処理を修正すればいいですが、デフォルトや他者製のプラグインなどではそうはいきません。
そういうときに使います。
WordPress Codex 日本語版
WordPress.org リファレンス
まわりを充実させるのも大事
WordPressの編集画面は、投稿タイプだけでできているわけではありません。むしろ投稿タイプはベースになっているもの。
ブロックを作ったり、タクソノミー(カテゴリ、タグなど)を充実させたり、メタデータ(カスタムフィールド)で項目を追加したり。
こっちのほうを充実させるほうが編集をもっと便利にさせます。
この3つは、数あるカスタマイズの方法のごく一部です。でもこれくらいをするだけでも編集画面を充実させることができます。
ぜひチャレンジしてみてください。
じつはブロックもひとつの投稿タイプで 'wp_block' という名で登録されている。
タクソノミーは投稿をグループ化する別データ、メタデータは投稿の付属データ。これはデータベースのテーブルが別にあり、投稿IDでつながっている。