2015.12.23

WordPressの条件分岐で現在のページを判別する方法

wp-page-

WordPressをカスタマイズする人は多分、トップージと記事ページや他のページは別のデザインにしたいとか、別のスクリプトを読み込ませたいとかあると思います。
しかし、header.phpを2つも3つも作るのはなんかナンセンスですよね。
管理もしにくいし・・・

そこで、WordPressは便利な関数を用意してくれています。
自分のメモも兼ねてこちらにまとめておきます。

◆目次

    WordPress の条件分岐タグ

    WordPress は条件分岐タグ(Conditional Tag)というタグが用意されています。
    ブログで使用すると言うよりは、普通のサイトを作るとにめっちゃ使うと思います。

    トップージかどうか判別する。

    トップページかどうかはis_home()を使用し判別します。

    <?php if(is_home()): ?>
        ここのコードが表示or実行されます。
    <?php endif; ?>

    ただし、このis_home()はブログでよくあるページネーションで次のページに移動してもトップページと判別してしまうため純粋にトップページだけを判別したい場合は下記のようにか書き換えます。

    <?php if(is_home() && !is_paged()): ?>
      トップページのみ表示されます。
    <?php endif; ?>

    トップページではないフロントページを判別するとき

    is_home()では判別できないトップページがあります。

    wp-page-img2

    それが、WordPress上で固定ページや投稿ページをフロントページに設定した場合です。

    その場合はis_front_page()を使用します。

    <?php if(is_front_page()): ?>
      フロントページです。
    <?php endif; ?>

    その他、固定ページと投稿ページの判別

    投稿ページはis_single()固定ページはis_page()で判別します。
    ちなみに、パラメータを渡せば更に細かく判別できます。

    投稿ページはブログの記事ページのことです。
    ダッシュボードの投稿から作成できます。

    <?php if(is_single('num')) : ?>
        記事のページID:"num"を表示しています。
    <?php elseif(is_single(array(num1, num2, num3))) : ?>
        記事のページID:"num1, num2, num3"のうちのどれかをを表示しています。
    <?php endif ?>

    固定ページは投稿とは異なりダッシュボード→固定ページから作成できます。
    親子構造にできたり投稿ページにはない機能があります。

    <?php if(is_page('num')): ?>
        このページはページIDは"num"です!
    <?php elseif(is_page('CONTACT')): ?> 
        このページのタイトルは"CONTACT"です!
    <?php elseif(is_page('contact')): ?> 
        このページの投稿スラッグは"contact"です!
    <?php endif; ?>

    条件分岐でハマった単純なこと・・・

    上記のタグを書くとそれに応じたtrue / falseが返ってくるのですが、それがうまくいかない場合があります。

    大昔は<script><head>に記述する時代がありましたが、もはや<script>の記述場所はレギュレーションやエンジニアの好みで変えられるものになっています。

    wp-page-img3

    WordPressでの判別において<head>内で記述するには問題ありませんがコンテンツをquery_posts()を使用し取得するとそれ以降はすべてarchiveとして認識されるためfooter.phpとかにis_home()とか書いてもfalseになってしまいます。
    上記画像で言えばcontent以降です。

    なので、この場合は不要になったqueryをキャンセルすればOKのようです!
    記事取得の後に下記を記述します。

    <?php wp_reset_query(); ?>

    これで、無事解決しました。!

    まとめ、今回紹介したタグ一覧

    is_home() トップページの判別
    is_paged() 分割された2ページ目以降かどうかの判別
    is_front_page() ダッシュボード → 設定 → 表示設定でフロントページ設定したページかどうかを判別
    is_single() 個別ページ(シングルページ)かどうかを判別
    is_page() 固定ページを判別する

    以上、ご参考にしてください。