サポート » 使い方全般 » カスタム投稿タイプのアーカイブを判別する条件分岐の方法

  • 解決済 conte9999

    (@conte9999)


    お世話になっております。

    カスタム投稿タイプを複数設定して、
    テーマのtitleタグに

    (1)カスタム投稿タイプに分類される各記事

    (2)archive-xxx.php で表示されるアーカイブページ

    で条件分岐させてそれぞれ異なったテキストを表示させたいのですが、なかなかうまくいきません。

    下記のように記述したのですがアーカイブページでは意図通り表示ができませんでした。

    <?php if(( get_post_type() == 'custompost01')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ01</title>
    
    <?php elseif(( get_post_type() == 'custompost02')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ02</title>
    
    <?php elseif(( get_post_type() == 'custompost03')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ03</title>
    
    <?php elseif(get_query_var(“custompost01”)): ?>
    
    <title>カスタム投稿タイプ01のアーカイブページ</title>
    
    <?php elseif(get_query_var(“custompost02”)): ?>
    
    <title>カスタム投稿タイプ02のアーカイブページ</title>
    
    <?php elseif(get_query_var(“custompost03”)): ?>
    
    <title>カスタム投稿タイプ03のアーカイブページ</title>
    
    <?php else: ?>
    
    <title><?php wp_title(' - ', true, 'right'); bloginfo('name');?></title>
    
    <?php endif; ?>

    どのように記載するとうまくいくものでしょうか。
    お手数おかけしますがご教授いただければと思います。

    どうぞ宜しくお願いします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • is_post_type_archive() だと思います。

    is_post_type_archive()


    Codex日本語版は http://wpdocs.osdn.jp/関数リファレンス/is_post_type_archive

    • この返信は3年、 6ヶ月前にgblsmが編集しました。
    • この返信は3年、 6ヶ月前にgblsmが編集しました。

    gblsm様 ご指導ありがとうございます。

    さっそく試してみました。

    しかし下記のコードでは、やっぱりうまくいかず、archive-xxx.phpのタイトルは、
    アーカイブされた記事の、一番上位にあるエントリーと同じタイトルになってしまいます。

    <?php if(( get_post_type() == 'custompost01')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ01</title>
    
    <?php elseif(( get_post_type() == 'custompost02')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ02</title>
    
    <?php elseif(( get_post_type() == 'custompost03')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ03</title>
    
    <?php elseif(is_post_type_archive('custompost01')): ?>
    
    <title>カスタム投稿タイプ01のアーカイブページ</title>
    
    <?php elseif(is_post_type_archive('custompost02')): ?>
    
    <title>カスタム投稿タイプ02のアーカイブページ</title>
    
    <?php elseif(is_post_type_archive('custompost03')): ?>
    
    <title>カスタム投稿タイプ03のアーカイブページ</title>
    
    <?php else: ?>
    
    <title><?php wp_title(' - ', true, 'right'); bloginfo('name');?></title>

    しかし、is_post_type_archiveだけで条件分岐するとうまくいきました。

    get_post_type での条件分岐と併用することはできないのでしょうか?

    お忙しいところ何度もお手数をおかけし申し訳ありませんが、
    引き続きご教授よろしくお願いします。

    LABE

    (@latobeam)

    get_post_type() は引数を指定しない場合、グローバル変数の $post のデータから投稿タイプを取得します。
    これにはアーカイブページの場合、おそらくそのページで表示される最初の投稿のデータが含まれます。
    よって、アーカイブページであっても get_post_type() が有効となり、その if 文にひっかかってしまうのです。
    これを回避するには、個別投稿ページの判別に is_singular() などを併用したり、 is_post_type_archive()get_post_type() より先に書くといった方法が考えられます。

    @latobeam さんが書いてくださいましたが、WordPress コア(4.4から)に目的どおりの関数が用意され、Twenty Sixteen などのテーマはこれを利用しています。一度試してみてはいかがでしょう。また関数の内部コードを自分の好みに変えても良いと思います。

    wp_get_document_title()

    • この返信は3年、 6ヶ月前にgblsmが編集しました。

    LABE様、gblsm様

    ご指導本当にありがとうございます。
    get_post_type()の性質、理解いたしました。

    is_post_type_archive() を get_post_type() より先に書くといった方法が考えられます。

    ということですので、is_post_type_archive を先に記述したところ意図通りの動作になりました。

    <?php if(is_post_type_archive('custompost01')): ?>
    
    <title>カスタム投稿タイプ01のアーカイブページ</title>
    
    <?php elseif(is_post_type_archive('custompost02')): ?>
    
    <title>カスタム投稿タイプ02のアーカイブページ</title>
    
    <?php elseif(is_post_type_archive('custompost03')): ?>
    
    <title>カスタム投稿タイプ03のアーカイブページ</title>
    
    <?php elseif(( get_post_type() == 'custompost01')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ01</title>
    
    <?php elseif(( get_post_type() == 'custompost02')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ02</title>
    
    <?php elseif(( get_post_type() == 'custompost03')): ?>
    
    <title><?php the_title(); ?> - カスタム投稿タイプ03</title>
    
    <?php else: ?>
    
    <title><?php wp_title(' - ', true, 'right'); bloginfo('name');?></title>
    
    <?php endif; ?>

    お忙しいところご教授ありがとうございました!
    今後ともよろしくお願いします!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタム投稿タイプのアーカイブを判別する条件分岐の方法」には新たに返信することはできません。