カスタム投稿タイプの投稿や一覧、カテゴリー表示やカテゴリー一覧表示などのまとめ。
まずカスタム投稿タイプに関する言葉の整理
何度も調べなおす言葉の使い方。
- カスタム投稿タイプ
- 任意に作った「post(投稿)」。表示に使われるテーマファイルはsingle.php、single-カスタム投稿タイプのスラッグ.php。一覧ページはarchive.php、archive-カスタム投稿タイプスラッグ.php
- タクソノミー
- カスタム投稿タイプに紐づけている場合は、そのカスタム投稿タイプのカテゴリーみたいな役割を果たす。固定ページを作成し、page-タクソノミースラッグ.phpをテンプレートに選択することでターム一覧を表示できる。
- ターム
- タクソノミーがカテゴリーだとしたら、タームは個々のカテゴリー名のこと。表示に使われるテーマファイルはtaxonomy.php、taxonomy-タクソノミースラッグ-タームスラッグ.php
- トップページ
- 固定ページ
- 投稿アーカイブ
- 投稿カテゴリー一覧
- 投稿カテゴリー(カテゴリー名)
- 投稿1
- 投稿2
- カスタム投稿アーカイブ
- タクソノミー(ターム一覧)
- タクソノミー(ターム名)
- カスタム投稿1
- カスタム投稿2
カスタム投稿タイプの情報を表示する
single-カテゴリースラッグ.phpで表示
▼カスタム投稿タイプに紐づいたターム(カテゴリー名みたいなもの)を表示する
<?php $terms = get_the_terms($post->ID,'タームスラッグ'); foreach( $terms as $term ) :?> <?php echo $term->name; ?> <?php endforeach; ?>
▼そのカスタム投稿が属するタームで条件分岐する
<?php if( has_term('特定ターム名','タクソノミースラッグ') ) {?> カスタム投稿タイプ「製品」用のカスタムタクソノミー「製品カテゴリー」に登録しているターム「車」「バイク」「自転車」 で条件分岐する <?php } ?>
page-タクソノミースラッグ.phpでターム情報を表示
カスタムタクソノミーのアーカイブページを作りたい場合。
固定ページを作り、専用のテーマファイル(page-タクソノミースラッグ.php)を選択する。
▼基本のループ
<?php $taxonomy_name = 'カスタム投稿スラッグ'; $taxonomys = get_terms('$taxonomy_name','hide_empty=0'); foreach ( $taxonomys as $taxonomy ) : ?> (各タームのURL)<a href="<? echo home_url( '$taxonomy_name' ) ; ?>/<? echo esc_html($taxonomy->slug) ; ?>/"> (スラッグ)<? echo esc_html($taxonomy->slug) ; ?>.png" alt=""/> <?php endforeach; ?>
タームでカスタムフィールドを使っている場合。
たとえば、カスタムタクソノミー「製品カテゴリー」で各カテゴリー用の見出し画像を登録する場合など。
<?php $taxonomy_name = 'カスタム投稿スラッグ'; $taxonomys = get_terms('$taxonomy_name','hide_empty=0'); foreach ( $taxonomys as $taxonomy ) : ?> <?php //各ターム登録のカスタムフィールドの値をとる $term_id = esc_html($taxonomys->term_id); $term_idsp = $taxonomy_name . '_' . $term_id; $term_items = get_field('カスタムフィールド名',$term_idsp); ?> (各タームのURL)<a href="<? echo home_url( '$taxonomy_name' ) ; ?>/<? echo esc_html($taxonomy->slug) ; ?>/"> (スラッグ)<? echo esc_html($taxonomy->slug) ; ?>.png" alt=""/> (カスタムフィールドの値)<?php echo $term_items; ?> <?php endforeach; ?>
ちなみに、page.phpで、固定ページのスラッグを表示する方法は下記。
<?php $page_slug = $post->post_name; echo $page_slug; ?>
と書いたけど、もっと簡単に、
<?php echo esc_attr($post->post_name);?>">
どう違うのかな。調べないと。
taxonomy-タクソノミースラッグ.phpでターム情報を表示
タクソノミーに登録したタームごとのページを作る場合に使う。
たとえば、
カスタム投稿タイプ「製品」
カスタムタクソノミー「製品カテゴリー」
「製品カテゴリー」に「車」「バイク」「自転車」といったタームが登録されている場合。
▼タームスラッグを表示する
<?php echo $term ?>
▼タームタイトル(ターム名)を表示する
<?php single_term_title(); ?>
▼タームディスクリプションを表示する(カテゴリーの説明みたいなカ所)
<?php echo term_description();//pタグありで出力 ?> <?php echo strip_tags(term_description());//pタグを削除して出力 ?>
▼ターム一覧を表示する
<?php $terms = get_terms('タクソノミースラッグ','hide_empty=0');//hide_empty=0で投稿が無くても表示させている foreach ( $terms as $term ) : ?> <? echo esc_html($term->name);//ターム名 ?> <? echo esc_html($term->slug) ;//タームスラッグ ?> <? echo '<a href="'.get_term_link($term).'">'.$term->name.'</a>';//タームページへのリンクとターム名 ?> <?php endforeach; ?>
条件分岐
▼投稿タイプ(「製品(products)」という投稿タイプならproducts)
<?php if (get_post_type() === '投稿タイプスラッグ'): ?>
▼投稿タイプのアーカイブページ(「製品(products)」という投稿タイプならproducts)
<?php if (is_post_type_archive('投稿タイプスラッグ')): ?>
▼タクソノミーアーカイブ(「製品」に紐づけているproducts_catなら、products_cat)
<?php if (is_tax('タクソノミースラッグ')): ?>
▼タームアーカイブページ(「製品」に紐づけているproducts_catの中のcat01なら、’products_cat’, ‘cat01’)
<?php if(is_tax('タクソノミースラッグ', 'タームスラッグ')): ?>
- 参考サイト
- カスタム投稿タイプの条件分岐
- luladesign「【wordpress】条件分岐、よく使うif文まとめ」
- Takumi Hirashima Artworks「https://hirashimatakumi.com/blog/5271.html」
- Takumi Hirashima Artworks「WordPress タームの取得と表示方法」
- Codex日本語版「関数リファレンス/get terms」
- Takumi Hirashima Artworks「WordPress タクソノミーのターム一覧を表示する方法」
- Codex日本語版「関数リファレンス/get terms」
- kotori blog「カスタムタクソノミーに画像のカスタムフィールドを追加する方法[WordPress]」
- 誰かのためのホームページ制作「WordPress 各固定ページのスラッグ名のclassを付与する方法」