ナマスカーラ!パプリ子です!
WordPressをカスタマイズしていて、少しハマってしまった箇所があったので、備忘録も兼ねて記録しておきます。
トップページページだけ、特定のコンテンツを表示させたい
WordPressをカスタマイズしていて、特定のページのみ何かを動かしたいor消したい時、条件分岐タグをつかうと思います。
特に、サイトの顔となるトップページには、スライダーやサイドバーを配置して、豪華なデザインにしている人も多いですよね。
その場合、
1 2 3 4 5 |
<?php if(is_home()): ?> //トップページにだけに表示させたいコンテンツ <?php endif; ?> |
と記述したり、
1 2 3 4 5 6 7 8 9 10 |
<?php add_action($A,$B); function B(){ if(is_home()){ //トップページでだけ動かしたい関数の定義 } } ?> |
自分で関数をつくってアクションフックをかけたり、すると思うのですが、これが効かないことがある。
ループ処理が原因で、条件分岐タグが効かない
検索すると、このあたりの記事が解決策としてヒットすると思うのですが、ループ処理が原因で、条件分岐タグが効かないことがあるようです。
[WordPress] トップページなのにif(is_home())が効かないと思いきや | imasashi.net - imasashi.net |
上記の記事では、どちらも条件分岐タグの前にwp_reset_query();
を記述することで解決しています。
1 2 3 4 5 6 |
<?php wp_reset_query(); if(is_home()): ?> //トップページにだけに表示させたいコンテンツ <?php endif; ?> |
とか
1 2 3 4 5 6 7 8 9 10 11 |
<?php add_action($A,$B); function B(){ wp_reset_query(); if(is_home()){ //トップページでだけ動かしたい関数の定義 } } ?> |
とか。
トップページ以外のページに何かをしたい時の!is_home()
も、同様に条件分岐が効くはずです。
が!!!!!!
パプリ子は、トップページのサイドバーを外すために条件分岐タグを使いたかったのですが、なぜか、これを実践してもis_home()
もis_front_page
も効きませんでした。
結局、サーバー変数で無理矢理解決した
原因は分かりませんが、ループ処理のリセット以外の何かでハマってしまったようなので、サーバー変数で解決しました。
1 2 3 4 |
<?php if ( $_SERVER["REQUEST_URI"] === "/" ): ?> //トップページにだけに表示させたいコンテンツ <?php endif; ?> |
悪あがきのように、こう記述してみてもいいと思います。
(||
は、PHPの文法では”or”の意)
1 2 3 4 |
<?php if (is_home() || is_front_page() || $_SERVER["REQUEST_URI"] === "/" ): ?> //トップページにだけに表示させたいコンテンツ <?php endif; ?> |
特定のページ(Wordpressだと固定ページとか)にカスタマイズしたい時に、ドメイン以下のパスを指定するだけで条件分岐させることができるので、「便利だな〜」と思って使っていますが、
サーバー変数って何なのか、パプリ子もイマイチよく分かってないです。
とりあえず、Wordpress内では、$_SERVER["REQUEST_URI"]
を使ってURI(ドメインの後ろの部分)を指定してあげると、条件分岐みたいなことができるモノ、くらいの認識で良いと思います。
(サーバー変数はPHPで定義された変数なので、もちろんWordPress以外の場所でも活用されています)
でも、下の画像を見ればわかると思うのですが、サイトのトップページ(ホーム)って、純粋にドメインだけで/(スラッシュ)
の記述もないんですよね…
でも、それでも動いてるから………いいのかな。
同じ場所でハマってしまった方がいらっしゃれば、参考にしてみてください!