【 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()を使う必要があります。
この記事が気に入ったらサポートをしてみませんか?