【WordPress】テンプレートファイルとサイト構築(その3:カスタム投稿タイプ)

前回デフォルトの投稿タイプを解説したので今回はカスタム投稿タイプの解説となります。

今回疑似で作成するサイトのサイトマップはこちら

ページ名URLテンプレートファイル
トップページ/front-page.php
ブログ
(デフォルトの投稿タイプ)
/blog/
/blog/カテゴリー名/
/blog/カテゴリー名/ブログのスラッグ/
archive.php
category.php
single.php
新着情報
(カスタム投稿タイプ)
/news/
/news/タクソノミー名/
/news/タクソノミー名/新着のスラッグ/
archive-news.php
taxonomy.php
single-news.php
会社情報/company/page-company.php
お問い合わせ/contact/page-contact.php
プライバシーポリシー/privacy-poricypage.php

新着情報をカスタム投稿タイプで作成していきます。

アーカイブページ(/news/)

archive-news.php

<h2><?php post_type_archive_title(); ?>一覧</h2>
<ul class="news-contents-list">
    <?php
    if (have_posts()) :
        while (have_posts()) : the_post();
    ?>
            <li>
                <dl>
                    <dt><span class=""><?php the_time('Y-m-d'); ?></span></dt>
                    <?php taxonomies_label() ?>
                    <dd class="news-title">
                        <p><a href="<?php the_permalink(); ?>"><?php title_excerpt(37); ?></a></p>
                    </dd>
                </dl>
            </li>
    <?php
        endwhile;
    endif;
    ?>
</ul>
<div id="pager">
    <ul class="pager-contents">
        <?php
        page_navi();
        ?>
    </ul>
</div>

作りはほぼ通常の投稿タイプと変わりません。見せ方が違うためHTMLはやや異なりますが今回の話の対象外なのでそれ以外の異なる点を見て行きましょう。

<?php taxonomies_label() ?>

こちらはfunction.phpに作成した自作の関数を呼び出して、カスタム投稿タイプで作ったタクソノミーのターム名をddタグにclass付きで表示させています。
詳しくはこちらの記事を参照して下さい。

<?php title_excerpt(37); ?>

こちら通常の投稿タイプでも使用した自作の関数を呼び出していて引数を37に指定することでタイトルの文字数を37文字に指定しています。
詳しくはこちらの解説を参照して下さい。

タクソノミーのアーカイブ(/news/タクソノミー名/)

taxonomy.php

<h2><?php single_term_title(); ?>一覧</h2>
<ul class="news-contents-list">
    <?php
    if (have_posts()) :
        while (have_posts()) : the_post();
    ?>
            <li>
                <dl>
                    <dt><span class=""><?php the_time('Y-m-d'); ?></span></dt>
                    <?php taxonomies_label() ?>
                    <dd class="news-title">
                        <p><a href="<?php the_permalink(); ?>"><?php title_excerpt(37); ?></a></p>
                    </dd>
                </dl>
            </li>
    <?php
        endwhile;
    endif;
    ?>
</ul>
<div id="pager">
    <ul class="pager-contents">
        <?php
        page_navi();
        ?>
    </ul>
</div>

タクソノミーのターム名を呼び出す

<?php single_term_title(); ?>

以外は上記アーカイブページと変わりません。

カスタム投稿ページ(/news/タクソノミー名/投稿のスラッグ/)

single-news.php

<?php
if (have_posts()) :
    while (have_posts()) : the_post();
?>
        <span>
            <?php
            $terms = get_the_terms($post->ID, 'news_cate');
            $term = $terms[0];
            if ($terms) {
                echo '<a href="' . esc_url(get_term_link($term->term_id)) . '">' . $term->name . '</a>';
            }
            ?>
        </span>
        <h1><?php the_title(); ?></h1>
        <p class="date"><?php the_time('Y-m-d'); ?></p>
        <div id="contents-area">
            <?php the_content(); ?>
        </div>
<?php
    endwhile;
endif;
?>

特に難しいところはありませんが一点タクソノミーのターム名を取得してラベルとして表示している以下の箇所がややこしいですね。

<?php
$terms = get_the_terms($post->ID, 'news_cate');
$term = $terms[0];
  if ($terms) {
  echo '<a href="' . esc_url(get_term_link($term->term_id)) . '">' . $term->name . '</a>';
  }
?>

複数のタームに属している場合を考慮して配列の一番目[0]のタームを取り出しています。

コメント

タイトルとURLをコピーしました