デイトラでプログラミング始めました

カスタム投稿、カスタムタクソノミーの登録

カスタム投稿、カスタムタクソノミーを登録する

手動で登録

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

プラグイン「Custom Post Type UI」を使う

term一覧 (termはここではgenre)categoryやtagなど 

WordPressにおけるterm(ターム)とは?

WordPressにおいて、term(ターム)は、分類項目を指す言葉です。より具体的には、カテゴリーやタグ、そしてカスタムタクソノミーで作成された個々の項目のことを指します。

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に登録してあるもの taxomy.phpを作成

タクソノミーとterm(ターム)の関係

  • タクソノミー: 分類項目の種類を指します。
  • 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;
}