サポート » 使い方全般 » カスタム投稿が表示された場合の条件分岐タグを教えてください

  • 解決済 ijsdotnet

    (@ijsdotnet)


    テーマを自作しております。
    グローバルナビゲーションでアクティブになっているページのナビゲーションボタンの色が変更される物を作ろうとしております。
    固定ページの場合の条件分岐タグは分かるのですが、カスタム投稿で作成されたページが開かれている場合がうまく出来ません。

    <?php if(is_post_type_archive( 'page01' )): ?>
          <li id="glo_nav01_active"><a href="<?php echo home_url('/'); ?>page01">ページその一</a></li>
          <?php elseif(!is_post_type_archive( 'page01' )): ?>
          <li id="glo_nav01"><a href="<?php echo home_url('/'); ?>page01">ページその一</a></li>
        <?php endif; ?>

    上記の様に記載すると、一覧(page01-archive.php)の場合はちゃんと効いてくれますが、当然ながら個別ページ(page01-single.php)の場合は効きません。
    is_post_type_archive( 'page01' )ではなく、get_post_type=='page01'でもやってみましたが、まったく効かずメニューボタンすら消えてしまいます。

    要はカスタム投稿ページ(archive、single)が表示されている場合の条件分岐タグを教えていただけないでしょうか。

    つたない説明で申し訳ないですが、よろしくお願いいたします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    singleのときはis_singularでいかがでしょう。

    関数リファレンス/is singular – WordPress Codex 日本語版
    http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/is_singular

    トピック投稿者 ijsdotnet

    (@ijsdotnet)

    mypacecreator 様
    ありがとうございます。
    <?php if(is_post_type_archive( 'ポストタイプ' ) || is_singular('ポストタイプ' )): ?>にて無事に希望通りの結果が出来ました。

    ちなみに、get_post_type==’ポストタイプ’はどんな場面で使うのでしょうか?
    差し支えなければ教えていただけますでしょうか。

    今まで何度か使用を試みましたが、一度もそのポストタイプに関連したページの場合に適応された事がありません。
    私が参考にしているテキストには、
    「get_post_type==’informaiton’
    投稿タイプ「informaiton」が表示されているとき」と記載がありますが(^_^;)

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    ちなみに、get_post_type==’ポストタイプ’はどんな場面で使うのでしょうか?

    関数リファレンス/get post type – WordPress Codex 日本語版
    http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post_type

    Codexを読むと、この関数はループの中でしか使えません
    (global宣言すれば使えるのかな)

    ページタイトルやヘッダー、グローバルナビなどループ外で使いたいケースのほうが多いと思うので、get_post_typeは非常に使いづらい気がします(※個人の感想です)

    ijsdotnetさん、意味合い的にあっているかどうかわかりませんが
    「get_post_type==’informaiton’」で判定するならこんなかんじですかね?

    <?php if(get_post_type() == 'informaiton' )://投稿タイプ「custompost」の場合 ?>
    カスタム投稿タイプの時の条件
    <?php elseif(get_post_type() == 'post' )://投稿の場合 ?>
    投稿の時の条件
    <?php elseif(get_post_type() == 'page' )://固定ページの場合 ?>
    固定ページの時の条件
    <?php else ://その他の場合 ?>
    その他の時の条件
    <?php endif; //カスタムタイプによる条件分岐終了 ?>

    あまりPHP詳しくないので、間違っていたらすみません。
    正しいやり方かどうかは不明です。

    mypacecreatorさん

    Codexを読むと、この関数はループの中でしか使えません

    中身は引数をget_post()に渡して投稿オブジェクトのpost_typeプロパティを返すだけなので、特にループ中でなくても自由に使えると思うのですが、いかがでしょうか。

    ループ外で使うと、現在ロードされている投稿の一番最初のものの投稿タイプを返します。

    通常は、そこまで意識する必要は無いと思いますが、
    カスタムタクソノミー等、複数の投稿タイプが存在するようなものを取り扱うときは注意が必要です。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    mura0403さん、x743さん、Toro_Unitさん、援護射撃ありがとうございます。

    ijsdotnetさんのご質問とあまり逸れてしまうと申し訳ないので勝手にまとめます。

    その後検証したところget_post_typeの動きについてはx743さんのご指摘通りループ外でも一応動きます。
    が、Toro_Unitさんの補足の通り「投稿の一番最初のものの」値を返すので、個人的に過去それでけっこうハマったことがありまして、、、。

    なので、ijsdotnetさんが導いたように、条件分岐が目的なら
    <?php if(is_post_type_archive( 'ポストタイプ' ) || is_singular('ポストタイプ' )): ?>
    このやり方のほうが個人的にはシンプルで分かりやすいんじゃないかと思ってます。
    せっかくそのための関数が用意されているので。

    条件分岐が目的じゃなくて、ポストタイプの値自体を出力したり加工したりする目的ならget_post_typeでいいと思います。
    でも、私はget_query_varを使うことが多いですね。こっちの方が個人的には扱いやすい気がしますので。(※個人の感想です)

    Toro_Unitさん、mypacecreatorさん

    仰るとおりですね。私の主張だと他のループ内で使う関数と同じ条件になるので、的外れでした。
    失礼いたしました。ありがとうございます。

    トピック投稿者 ijsdotnet

    (@ijsdotnet)

    mypacecreator様をはじめ皆様ありがとうございます。
    私の質問でここまでの議論をしていただき感謝いたします。

    get_post_typeに関してですが、初心者には少々ハードルが高い印象を受けました。
    mypacecreator様ご教授のとおり<?php if(is_post_type_archive( 'ポストタイプ' ) || is_singular('ポストタイプ' )): ?>を使用していこうと思います。

    質問の目的は果たせましたのでクローズとさせていただきます。

    本当にありがとうございましたm(_ _)m

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタム投稿が表示された場合の条件分岐タグを教えてください」には新たに返信することはできません。