WordPressでサポートされている関数「get_header_image」と「header_image」は、どちらもヘッダー画像のパスを取得するときに使われます。
違いはheader_image関数がヘッダー画像のパスを出力するのに対してget_header_image関数は直接出力せずに戻り値として返します。
用途に応じて2つの関数を使い分けるようなイメージですが、実際にはこの2つは組み合わせて使われるのが定番です。
get_header_imageとheader_imageが一緒に使われる理由
たとえば、WordPressのテーマTwenty Fourteenのheader.phpを見ると、次のように記述されています。
<?php if ( get_header_image() ) : ?> <div id="site-header"> <a href="…略…> <img src="<?php header_image(); ?>" …略…> </a> </div> <?php endif; ?>
header.phpで単純にヘッダー画像を表示するだけならimgタグのsrc属性でheader_imageを呼び出してヘッダー画像のパスを出力するだけで良さそうですが、ここが落とし穴です。
重要なのは1行目の「if ( get_header_image() )」です。
条件分岐の「if」とヘッダー画像のパスを取得するget_header_image関数を組み合わせて何をしてるのかピンとこないかもしれませんが、このコードは「もしも、ヘッダー画像が登録されていれば」という条件分岐として機能します。
header.phpでは、常にヘッダー画像のimgタグを出力するわけではありません。「外観」-「ヘッダー」メニューからヘッダー画像がアップロード、登録されている場合のみに、ヘッダー画像を表示するという「条件設定」が必要です。
このような条件を設定して動作を制限するために「if ( get_header_image() )」のif文が機能しています。
日本語で書くと次のような構造になります。
ヘッダー画像が登録されている場合のみ以下を実行 ヘッダー画像(imgタグ)を表示する
このような条件付きでヘッダー画像を表示するため、header_image関数とget_header_image関数を組み合わせて使われています。
なぜ「if ( get_header_image() )」で「ヘッダー画像があれば」になるのか
header_image関数とget_header_image関数が組み合わせて使われるイメージはわかったとしても、なぜ「if ( get_header_image() )」で「ヘッダー画像があれば」になるのか、ピンとこないかもしれません。
理解できなくても不思議はありません。このコードは入門用のコードではないからです。
まず、このif文では重要なキーワードが省略されているのでわかりづらくなっています。省略せずに書くと次のようになります。
<?php if ( get_header_image() == true ) : ?> ヘッダー画像を表示 <?php endif ?>
get_header_image関数の実行結果にはヘッダー画像のパスが入ってきますが、ここで知りたいのは「何か入っているのか、それとも空っぽなのか」のどちらか、つまり「YESかNOか」の二択です。
パスが入っているのか、空っぽなのかを二択で調べるために「== true」という特殊な聞き方をしています。
取得したパスに何か入っていればtrue、何も入っていなければfalseだと解釈されるというPHPの特性を活用した特殊なif文です。
特殊と言っても「空かどうか」を調べるだけの単純な用途ですが、「== true」が省略されていることで解読しづらくなります。
本格的に理解するには時間がかかるかもしれませんが、header.phpの「if ( get_header_image() )」のようにif文の( )の中に関数名だけが書いてあるようなコードを見かけたら、「何か入っているか調べているのかも」と推測してみてください。