// カスタム投稿、カスタムタクソノミーの追加
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;
}