wordpressは便利な機能が多いですよね。
その中でも多く使用する機能の一つにタグとカテゴリー
があります。
今回はカスタム投稿でタグとカテゴリーアーカイブ
を作成する方法を記載します。
目次
カスタム投稿作成
まずはカスタム投稿を作成します。
function.phpにカスタム投稿作成の記述をします。
/* カスタム投稿タイプ */
add_action( ‘init’, ‘create_post_type’ );
function create_post_type() {
register_post_type( ‘event’, /* post-type */
array(
‘labels’ => array(
‘name’ => __( ‘イベント’ ),
‘singular_name’ => __( ‘イベント’ )
),
‘public’ => true,
‘has_archive’ => true, /* アーカイブページを持つ */
‘menu_position’ => 5, //管理画面のメニュー順位
‘supports’ => array( ‘title’, ‘author’, ‘thumbnail’, ‘excerpt’, ‘custom-fields’, ‘comments’ ),
)
);
/* ここから */
register_taxonomy(
‘event_cat’, /* タクソノミーの名前 */
‘event’,
array(
‘hierarchical’ => true, //カテゴリータイプの指定
‘update_count_callback’ => ‘_update_post_term_count’,
//ダッシュボードに表示させる名前
‘label’ => ‘イベントのカテゴリー’,
‘public’ => true,
‘has_archive’ => true, /* アーカイブページを持つ */
‘show_ui’ => true
)
);
/* ここから */
register_taxonomy(
‘event_tag’, /* タクソノミーの名前 */
‘event’,
array(
‘hierarchical’ => false, //タグタイプの指定(階層をもたない)
‘update_count_callback’ => ‘_update_post_term_count’,
//ダッシュボードに表示させる名前
‘label’ => ‘イベントのタグ’,
‘public’ => true,
‘has_archive’ => true, /* アーカイブページを持つ */
‘show_ui’ => true
)
);
/* ここまでを追加 */
}
|
追加すると管理画面に「イベント」と名前が
入った投稿が作成されます。
カテゴリー一覧作成
ではカスタム投稿でカテゴリーの一覧を作成する
方法を見てみましょう。
まずテンプレートですが、
名前は任意ではありません。
テンプレート名は下記の様になります。
taxonomy-「post_type」_cat.php
ですので、
今回post_typeが「event」ですので、
taxonomy-event_cat.php
になります。
下記が記載するコードです。
<?php
/*
Template Name: カテゴリテンプレート
*/
?>
<?php get_header(); ?>
<?php
$type = get_query_var( ‘event_cat’ ); //指定したいタクソノミーを指定
$args = array(
‘post_type’ => array( ‘event’ ), /* 投稿タイプを指定 */
‘tax_query’ => array(
‘relation’ => ‘OR’,
array(
‘taxonomy’ => ‘event_cat’, /* 指定したい投稿タイプが持つタクソノミーを指定 */
‘field’ => ‘slug’,
‘terms’ => $type, /* 上記で指定した変数を指定 */
),
),
‘paged’ => $paged,
‘posts_per_page’ => ’16’ /* 16件を取得 */
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ): ?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<!–ここからループ–>
<!–ここまでループ–>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
事例がありません。
<?php endif; ?>
<?php get_footer(); ?>
|
ポイントは下記になります。
1,$type = get_query_var( ‘event_cat’ ); で指定したいタクソノミーを指定。
こちらはカスタム投稿作成で作成した
タクソノミーの名前、今回はカテゴリーの一覧なので
「event_cat」を指定します。
2,’tax_query’ => array( ),でタクソノミーに関連付けされた記事を取得。
get_posts()で記事を呼び出す際に、tax_queryを使うところが今回のポイントです。
tax_queryは、記事の取得条件を細かく絞り込むことができる便利なパラメータです。
変数$typeで定義したタクソノミーに関連付けされた記事に絞り込み、
各個別の記事を取得しています。
タグ一覧作成
今度はカスタム投稿でタグ一覧を作成する
方法を見てみましょう。
まずテンプレートですが、
こちらも名前は任意ではありません。
テンプレート名は下記の様になります。
taxonomy-「post_type」_tag.php
ですので、
今回post_typeが「event」ですので、
taxonomy-event_tag.php
になります。
下記が記載するコードです。
<?php
/*
Template Name: タグテンプレート
*/
?>
<?php get_header(); ?>
<?php
$type = get_query_var( ‘event_tag’ ); //指定したいタクソノミーを指定
$args = array(
‘post_type’ => array( ‘event’ ), /* 投稿タイプを指定 */
‘tax_query’ => array(
‘relation’ => ‘OR’,
array(
‘taxonomy’ => ‘event_tag’, /* 指定したい投稿タイプが持つタクソノミーを指定 */
‘field’ => ‘slug’,
‘terms’ => $type, /* 上記で指定した変数を指定 */
),
),
‘paged’ => $paged,
‘posts_per_page’ => ’16’ /* 16件を取得 */
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ): ?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<!–ここからループ–>
<!–ここまでループ–>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
事例がありません。
<?php endif; ?>
<?php get_footer(); ?>
|
こちらもポイントは下記になります。
1,$type = get_query_var( ‘event_tag’ ); で指定したいタクソノミーを指定。
こちらはカスタム投稿作成で作成した
タクソノミーの名前、今回はタグの一覧なので
「event_tag」を指定します。
2,’tax_query’ => array( ),でタクソノミーに関連付けされた記事を取得。
get_posts()で記事を呼び出す際に、tax_queryを使うところが今回のポイントです。
tax_queryは、記事の取得条件を細かく絞り込むことができる便利なパラメータです。
変数$typeで定義したタクソノミーに関連付けされた記事に絞り込み、
各個別の記事を取得しています。
記事を表示するURLについて
ではテンプレートをテーマファイル内に
アップして記事を表示させてみましょう。
https://abc.co.jp/「post_type」/「タクソノミー名」/「スラッグ名」/
で表示をさせます。
なので今回は下記で表示が出来ます。
カテゴリー一覧
https://abc.co.jp/event/event_cat/スラッグ名/
タグ一覧
https://abc.co.jp/event/event_tag/スラッグ名/
上記がカスタム投稿のタクソノミー一覧を表示させる
URLになります。
各スラッグ名に対して表示してくれるので、
このテンプレート1枚で大丈夫です。
スラッグとは
カテゴリーやタグを管理画面より追加する際の
アルファベットになります。
URLをたたいて表示できれば完成です。
まとめ
今回はカスタム投稿で使用するタクソノミー一覧を
紹介しました。
便利な機能なのでぜひ使ってみてください。
参考サイト:
https://politik.hatenadiary.org/entry/20170303/1488537176
https://client.mamasquare.co.jp/