お知らせと制作実績では、入力項目、URL、一覧ページが異なります。内容の種類が明確に異なる場合は、カスタム投稿タイプとして分けると管理しやすくなります。
今回は制作実績をworks、業種による分類をwork_typeとして登録します。すべてをカスタム投稿へ分けるのではなく、運用方法と必要な一覧を先に決めてください。
制作実績の投稿タイプを登録する
内容の種類が異なる制作実績は投稿タイプを分け、必要な分類をタクソノミーとして追加します。

function wpload_register_content_types() {
register_post_type(
'works',
array(
'labels' => array(
'name' => '制作実績',
'singular_name' => '制作実績',
'add_new_item' => '制作実績を追加',
'edit_item' => '制作実績を編集',
),
'public' => true,
'show_in_rest' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'works' ),
'menu_icon' => 'dashicons-portfolio',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
)
);
}
add_action( 'init', 'wpload_register_content_types' );show_in_restをtrueにするとブロックエディターやREST APIに対応します。supportsには実際に入力する機能だけを指定します。
業種のタクソノミーを登録する
タクソノミーは投稿を分類する仕組みです。カテゴリーのように親子を持たせる場合はhierarchicalをtrueにします。
次の画像は、「業種のタクソノミーを登録する」で扱うコードや構成をブラウザで表示した結果です。

function wpload_register_content_types() {
// register_post_type()は前のコードと同じ位置に残します。
register_taxonomy(
'work_type',
array( 'works' ),
array(
'labels' => array(
'name' => '業種',
'singular_name' => '業種',
),
'public' => true,
'show_in_rest' => true,
'hierarchical' => true,
'show_admin_column' => true,
'rewrite' => array( 'slug' => 'work-type' ),
)
);
}
add_action( 'init', 'wpload_register_content_types' );実際には同名の関数やadd_action()を二重に書かず、前のwpload_register_content_types()の中へregister_taxonomy()を追加します。
一覧と詳細のテンプレートを用意する
- archive-works.php:制作実績の一覧
- single-works.php:制作実績の詳細
- taxonomy-work_type.php:業種ごとの一覧
最初はarchive.phpやsingle.phpを複製し、見出しと表示項目を制作実績向けに変更します。テンプレート階層に沿ったファイル名でなければ読み込まれません。
次の図では、「一覧と詳細のテンプレートを用意する」の仕組みや関係を確認できます。

パーマリンクを更新する
投稿タイプやURL設定を追加した直後に404になる場合は、管理画面の「設定」→「パーマリンク」を開き、設定を保存します。これによりURLのルールが更新されます。
次の図では、「パーマリンクを更新する」の仕組みや関係を確認できます。

flush_rewrite_rules()を毎回のアクセスで実行すると負荷がかかります。initの関数内へ安易に書かないでください。
管理と表示を確認する
投稿タイプと分類を登録した後は、複数の制作実績を入力して一覧表示を確認します。

- 管理画面から業種を2つ作る
- 制作実績を3件以上登録して業種を設定する
- 一覧、詳細、業種別一覧を開く
- アイキャッチ画像がない投稿も崩れないか確認する
- REST APIに制作実績と業種が出るか確認する
- 存在しない制作実績URLが404になるか確認する