前提
通常の投稿タイプをお知らせで使用しており、カスタム投稿タイプで施工事例を追加したい
流れ
- functions.phpに施工事例のカスタム投稿タイプを管理画面に表示するように設定。カスタム投稿タイプにカテゴリとタグが表示される記述を書く。
/* ---------- カスタム投稿タイプを追加 ---------- */
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type(
'works',
array(
'label' => '施工事例',
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'menu_position' => 5,
'supports' => array(
'title',
'editor',
'thumbnail',
'revisions',
),
)
);
register_taxonomy(
'workscat',
'works',
array(
'label' => 'カテゴリー',
'hierarchical' => true,
'public' => true,
'show_in_rest' => true,
)
);
register_taxonomy(
'workstag',
'works',
array(
'label' => 'タグ',
'hierarchical' => false,
'public' => true,
'show_in_rest' => true,
'update_count_callback' => '_update_post_term_count',
)
);
}
- Custom Post Type Permalinksのプラグインを入れて、カスタム投稿タイプのURL構造を決定。末尾を/%post_id%にする。
- archive-works.phpとsingle-works.phpという名前のファイルを作り、archive-works.phpを固定ページのテンプレートにする。
- 管理画面から施工事例ページをつくり、テンプレートを適用。
- archive-works.phpの中とsingle-works.phpの中に呼び出したい内容を書く。※この時、カスタム投稿タイプのループのみを取得するため、Queryにカスタム投稿タイプ名「works」を入れる。いつものお知らせに使用している、
<?php
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post(); ?>
の部分を下記に変更するだけ
<?php
$args = [
'post_type' => 'works', // カスタム投稿名
];
$my_query = new WP_Query($args); ?>
<?php if ($my_query->have_posts()): // 投稿がある場合 ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
カテゴリを表示したいときは、
<?php
// カテゴリーのデータを取得
$cat = get_the_category();
$cat = $cat[0];
?>
上記をループ前に書き、出力表示したいところに以下を書く
<?php
if ($terms = get_the_terms($post->ID, 'workscat')) {
foreach ( $terms as $term ) {
echo ('<span>') ;
echo esc_html($term->name) ;
echo ('</span>') ;
}
}
?>