// カスタム投稿、カスタムタクソノミーの追加
add_action('init', function () { // カスタム投稿タイプの登録 register_post_type('item', [ 'label' => '商品', 'public' => true, 'menu_icon' => 'dashicons-store', //supportsはアイキャッチ画像、やタイトルなど投稿画面の右側 'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'page-attributes'), 'has_archive' => true, 'hierarchical' => true, //新エディタにするために必ず必要 'show_in_rest' => true ]); register_taxonomy('genre', 'item', [ // カスタムタクソノミーの追加、'genre'→追加するタクソノミー名前、'item'→タクソノミーを追加したいpost_typeの名前 'label' => '商品ジャンル', //カテゴリは階層があるのでtrue,タグはfalse 'hierarchical' => true, //新エディタにするために必ず必要 'show_in_rest' => true, ]);
});
WordPressにおけるterm(ターム)とは?
WordPressにおいて、term(ターム)は、分類項目を指す言葉です。より具体的には、カテゴリーやタグ、そしてカスタムタクソノミーで作成された個々の項目のことを指します。
- カテゴリー: 「WordPress」「デザイン」「プログラミング」など、記事を大まかに分類する項目
- タグ: 「HTML」「CSS」「JavaScript」など、記事のキーワードとなる項目
- カスタムタクソノミー: 「商品カテゴリ」「著者」「地域」など、自由に設定できる分類項目
//呼び出したい位置
$terms = get_terms('genre');
foreach($terms as $term): // get_template_partは呼び出し元の変数を使えないのでincludeをつかう include 'content-contribution.php';
endforeach;
//content-contribution.php
<li class="common-item"> <a class="common-link" href="<?php echo get_term_link($term); ?>"> <div class="common-image"> <?php $image_id =get_field('event_img', $term->taxonomy. '_'. $term->term_id); echo wp_get_attachment_image($image_id, 'contribution'); ?> </div> <div class="common-body"> <p class="name"><?php echo $term->name; ?></p> <p class="caption"><?php echo $term->description; ?></p> <div class="buttonBox"> <button type="button" class="seeDetail">MORE</button> </div> </div> </a>
</li>
- タクソノミー: 分類項目の種類を指します。
- term: 各タクソノミーに属する具体的な項目を指します。
例えば、「カテゴリー」というタクソノミーの中に、「WordPress」や「デザイン」といったtermが含まれます。
//functions.phpに登録してあるフィルタリング
//投稿ページのフィルタリングを使用する
function get_specific_posts($post_type, $taxonomy = null, $term = null, $number = -1)
{ if (!$term): $terms_obj = get_terms('genre'); $term = wp_list_pluck($terms_obj, 'slug'); endif; $args = array( 'post_type' => $post_type, 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $term, ), ), 'posts_per_page' => $number, ); $specific_posts = new WP_Query($args); return $specific_posts;
}
//taxonomy.php
$term = get_specific_posts('daily_contribution', 'genre', '$term', -1);
if($term->have_posts()): while($term->have_posts()):$term->the_post(); get_template_part('includes/content-tax');
endwhile;
endif;
//content-tax.php
<li class="common-item"> <a class="common-link" href="<?php the_permalink(); ?>"> <div class="common-image"> <?php the_post_thumbnail(); ?> </div> <div class="common-body"> <p class="name"><?php the_title(); ?></p> <p class="caption"><?php echo get_the_excerpt(); ?></p> <div class="buttonBox"> <button type="button" class="seeDetail">MORE</button> </div> </div> </a>
</li>
//メインタイトルを修正
function get_main_title() { if ( is_singular( 'post' ) ): $category_obj = get_the_category(); return $category_obj[0]->name; elseif ( is_page() ): return get_the_title(); elseif ( is_category() || is_tax() ): return single_cat_title(); elseif ( is_search() ): return ' サイト内検索結果'; elseif ( is_404() ): return ' ページが見つかりません'; //カスタム投稿の時にカスタム投稿を表示 elseif ( is_singular( 'item' ) ): global $post; $term_obj = get_the_terms( $post->ID, 'genre' ); return $term_obj[0]->name; endif;
}