WordPressでオリジナルテーマの作成を学習中。
ハマり事項の備忘録。
ハマりポイント
カスタム投稿タイプにオリジナルのカテゴリー(タクソノミー)設定して、サイドバーからarchiveリンク作って遷移させると記事内容はカスタム投稿タイプになっているのに、表示されるページがarchive-[post_type].phpではなく、archive.phpで生成されている。どうやったらarchive-[post_type].phpにできるのか?
カスタム投稿の作成
functions.phpで、カスタムのポストタイプとタクソノミーを作成
//post_typeの登録
function create_post_type() {
$supports = [
'title',
'editor',
'thumbnail',
];
//post_typeの登録
register_post_type( 'work',
array(
'label' => 'work', //メニューに表示するpost_typeの名前
'labels' => array( //get_post_type_labels()を参照
'add_new' => '新規Work追加',
'edit_item' => 'Workの編集',
'view_item' => 'Workの表示',
'search_items' => 'Workを検索',
'not_found' => 'Workは見つかりませんでした。',
'not_found_in_trach' => 'ゴミ箱にWorkはありませんでした。'
),
'public' => truem,
'description' => 'カスタム投稿タイプ「work」の説明文です。',
'hierarchical' => false,
'has_archive' => true, //archiveページを作るならtrue
'menu_position' => 5,
'supports' => $supports,
'taxonomies' => array( 'work_category' ) //タクソノミーの指定
)
);
//カスタムのカテゴリー(タクソノミー)の登録
register_taxonomy(
'work_category',
'work',
array(
'label' => 'ワークカテゴリー',
'labels' => array(
'popular_items' => 'よく使うワークカテゴリー',
'edit_item' => 'ワークカテゴリーを編集',
'add_new_item' => '新規ワークカテゴリーを追加',
'search_items' => 'ワークカテゴリーを検索'
),
'public' => true,
'desctiption' => 'ワークスカテゴリーの説明文です。',
'hierarchical' => true,
)
);
}
add_action( 'init', 'create_post_type' );
タクソノミーごとのarchiveページの表示
サイドバー等にタクソノミーごとのarchiveメニューをwp_list_categories()で設定する
$cat_args = array(
'title_li' => '', //タクソノミーの<li>にオリジナルのclassを設定。不要ならブランク。
'show_count' => 1, //投稿数の表示
'taxonomy' => 'work_category' //タクソノミーの指定
);
echo wp_list_categories($cat_args);
試したこと
wp_list_categories() で生成されたurlを確認すると、post_typeを示すデータが入っていない。試しに、urlにクエリでpost_typeのデータ渡すと、archive-[post_type].phpでページを作ってくれる。
wp_list_categories()にはpost_typeを指定する引数がないので、解決せず。
結果
wp_list_categories()で自動生成されるリンクのスラッグはタクソノミー名(例ではwork_category)になるので、
taxonomy.php(またはtaxonomy-[slag].php)を準備しておく。
taxonomy.phpがない場合はarchive.phpが使われる
カスタム投稿タイプのarchive(archive-[post_typeのスラッグ].php)があっても使われないので注意。
よく考えたらそりゃそうか、という話。