見出し画像

【 WordPress 】 カスタム投稿タイプのページ判定 FirE♯530

WordPressのカスタム投稿タイプで、

「news」と、「blog」というカスタム投稿タイプを作ります。

それぞれの記事を、single.phpで共通のレイアウトにします。

記事ページから、再度、一覧ページを移動するボタンを設置する場合に、

現在のページが「news」の記事ページの場合は、「news」一覧のアーカイブページへ飛ばす。

現在のページが「blog」の記事ページの場合は、「blog」一覧のアーカイブページへ飛ばす。

このように、共通のsingle.phpを使いながら、リンクのボタンのみ条件分岐させる方法を解説します。


【 カスタム投稿タイプ 】

カスタム投稿タイプの設定は、こちらで解説しています。



【 カスタム投稿タイプのアーカイブ 】

準備として、アーカイブページを作ります。

■ functions.php

/** カスタム投稿タイプ追加 お知らせ*/
add_action('init', function () {
  register_post_type('news', [
    'label' => 'お知らせ', //投稿タイプ名
    'public' => true, //メニュに表示する
    'menu_position' => 5, //メニュのどこに表示するか
    'supports' => ['thumbnail', 'title', 'editor'], //投稿編集画面の機能
    'has_archive' => true/* アーカイブページを持つ */
  ]);
});

/** カスタム投稿タイプ追加 ブログ*/
add_action('init', function () {
  register_post_type('blog', [
    'label' => 'ブログ', //投稿タイプ名
    'public' => true, //メニュに表示する
    'menu_position' => 6, //メニュのどこに表示するか
    'supports' => ['thumbnail', 'title', 'editor'] ,//投稿編集画面の機能
    'has_archive' => true /* アーカイブページを持つ */
  ]);
});

このように、 'has_archive'  を true にしておく必要があります。


■ archive-news.php

archive-news.phpというファイル名で、「news」専用のアーカイブページを作ります。


■ archive-blog.php

archive-blog.phpというファイル名で、「blog」専用のアーカイブページを作ります。



【 ページの判定 】

WordPressでは、現在いるページを判定するテンプレートタグがあります。
一部を紹介すると

■ 固定ページの場合

<?php if ( is_page('about') ) : ?>
    スラッグが「about」の固定ページで行う処理を書く
<?php endif; ?>

固定ページのaboutページを表示している場合に限定した処理を書くことができます。


■ 記事ページの場合

<?php if ( is_single('news') ) : ?>
    スラッグが「news」の個別投稿ページで行う処理を書く
<?php endif; ?>

記事ページのnewsというスラッグの場合に限定した処理を書くことができます。

今回の場合も、この方法で、「news」と「blog」を条件分岐して処理を書けば良さそうなのですが、これがうまくいきません。


■ カスタム投稿タイプのページ判定 

カスタム投稿タイプの場合は、このように書きます。

<?php if ( is_singular('news') ) : ?>
    //「news」というカスタム投稿タイプの個別投稿ページで行う処理を書く
<?php endif; ?>

これを元にして、single.phpに条件分岐を書きます。



【 条件分岐 】

single.phpで条件分岐文を書きます。

■ single.php

    <!--ニュースページの場合ー-->
    <?php if (is_singular('news')) : ?>

      <div class="archive-link">
        <a href="<?php echo home_url(); ?>/news">お知らせ一覧</a>
      </div>

    <!--それ以外の場合=blogの場合ー-->
    <?php else : ?>

      <div class="archive-link">
        <a href="<?php echo home_url(); ?>/blog">ブログ一覧</a>
      </div>

    <?php endif; ?>

if文を使って、現在のページが、カスタム投稿タイプの「news」の記事ページの場合は、「お知らせ一覧」( /news )へリンクします。

elseで、それ以外の場合=「blog」の記事ページの場合は、
「ブログ一覧」( /blog )へリンクします。

このように、現在のページを判定し、条件に応じて、リンク先を変えることができました。


【 まとめ 】

カスタム投稿タイプの条件分岐について書きました。

ポイントは、is_singular('news') です。

記事ページの処理でも、カスタム投稿タイプの場合は、is_singular()を使う必要があります。


この記事が気に入ったらサポートをしてみませんか?