テンプレートで見かける「if (!is_front_page())」の意味は?
WordPressのテンプレートファイルを開いたときに「if (!is_front_page())」というコードをよく見かけます。その意味を先に説明すると「フロントページ以外では」です。
たとえば、BizVektorのheader.phpでは次のように使われています。
<?php if (!is_front_page()) { ?> <?php get_template_part('module_pageTit'); ?> <?php get_template_part('module_panList'); ?> <?php } ?>
これは「トップページ以外ではページタイトルとパンくずリストを表示する」という内容になります。
意味がわかれば十分という方はこれで終了です。ただ、なぜ「!」が付いて「トップページ以外」なのかよくわからない方のためにもう少し説明します。
「if (!いろいろな命令)」のように「if」と「!」が一緒に使われるコードはテンプレートの中で多く登場します。これからテンプレートのカスタマイズにチャレンジしていこうと思っている方は、読んでみてください。
この記事の内容
フロントページかどうか調べるis_front_page
is_front_pageは、現在のページがフロントページか調べる命令です。たとえば、「トップページ以外でパンくずリストを表示したい」などを実現するときに使われます。
具体的には「トップページ以外で…」というコードを書きたいときは現在のページがトップページかどうかを調べる必要があるので、このis_front_pageのような命令が使われます。
is_front_pageと一緒に使われる「if」
is_front_pageは単独で使われるものではなく、「if」というPHPの構文と共に使われます。ifの役割は「もしも…」の組み立てです。
たとえば、
「トップページ以外でパンくずリストを表示する」は
「もしも、現在のページがトップページでない場合は、パンくずリストを表示する」と言い換えることができます。
この「もしも、… の場合は(でない場合は) … する」というコードを組み立てるときに「if」が使われます。
この構文は条件を満たすかどうかで別々の処理へと分岐していくことから「条件分岐」とよばれます。
「もしも、現在のページがトップページでない場合は、パンくずリストを表示する」を日本語を交えて表現すると次のようになります。
<?php if (現在のページがトップページでなければ) { ?> パンくずリストを表示する <?php } ?>
WordPressのテンプレートでは、「if」を閉じるのに「endif」を使うことも少なくありません。その場合は次のようになります。
<?php if(現在のページがトップページでなければ) : ?> パンくずリストを表示する <?php endif ?>
ifの( )の中に書かれた条件の構造
「もしも」(if)の条件を満たしたとき(トップページ以外)だけ、パンくずリストが表示される仕組みがわかったでしょうか。あとは、( )の中に書かれた「現在のページがトップページでなければ」をコードで表現する方法です。
「if」(もしも)の( )の中に書かれるコードは2択の質問だと考えることができます。
つまり、
「現在のページがトップページでなければ」は、
「現在のページはトップページですか?」の質問が「いいえ」だったら
に言い換えることができます。
そこで現在のページがトップページかどうか調べるis_front_pageの登場です。is_front_pageは「現在のページがトップページですか?」という質問に対して「はい」または「いいえ」で答えてくれる命令です(わかりやすく言えば)。
『もしも「現在のページがトップページですか?」が「いいえ」だったら』は、次のように記述することができます。
if (is_front_page() == false) {
falseは「はい」の反対の「いいえ」だと思ってください。
これで、
もしも「現在のページがトップページですか?」が「いいえ」だったら、つまり、「現在のページがトップページ以外だったら」の構造が理解できたでしょうか。パンくずリストを表示するコードは次のようになります。
<?php if (is_front_page() == false) { ?> (パンくずリストを表示) <?php } ?>
ただ、テンプレートをよく見ている方は「== false」というコードをあまり目にしないかもしれません。確かに、BizVektorには次のように書いてあります。
<?php if (!is_front_page()) { ?> <?php get_template_part('module_pageTit'); ?> <?php get_template_part('module_panList'); ?> <?php } ?>
「== false」の代わりに「!」が付いていたりしますが、これは「if」の省略形です。「== false」を省略した代わりに先頭に「!」を付加するスタイルにすることもできるのです。
つまり、
<?php if (is_front_page() == false) { ?>
と
<?php if (!is_front_page()) { ?>
は同じことです。「== false」の省略形だと説明されれば理解できると思いますが、いきなりテンプレートファイルを開いて「if (!is_front_page())」というコードを見てもピンとこないかもしれません。
テンプレートのコードがわかりづらくなる理由
これがWordPressテンプレートの特徴です。テンプレートファイルは入門者向けの教材ではなく実践的なコードが書いてあるため、場合によってはPHPの入門書を片手に解読しようとしても難しい部分があるということです。
実践的なプログラムは基本的に「短いコードの方が良い」という思想で記述されることが少なくありません。必然的に省略形のコードが多くなります。そのため、パッと見て直感的にはわかりづらいコードもありますが、そのようなWordPressテンプレートのクセを頭に入れながら、粘り強くコードを解読していきましょう。
どうしてもわからないときは西沢直木のIT講座にご相談ください。