WordPressテンプレートで使われているbloginfo関数とget_bloginfo関数の違い
Twenty Twelveなど、テンプレートファイルの中を見ていくと、bloginfoとget_bloginfoのように似たような名前の命令(関数:タグ)が使われていることに気付くかもしれません。この違いは、bloginfo関数はブログ情報を画面に表示しますが、get_bloginfo関数はブログ情報を戻り値として返します。
○似たような名前の2つの関数
bloginfo関数 → ブログ情報を表示する
get_bloginfo関数 → ブログ情報を(戻り値として)返す
プログラミングに慣れている方はこの説明だけで2つの関数の使い分けがピンとくるかもしれませんが、これからテンプレートのカスタマイズにチャレンジする方の中には、用途や「関数」、「戻り値」というキーワードがピンとこない方がいるかもしれません。そんな方のために、もう少し関数の使い方などを説明したいと思います。
まず、Twenty Twelveのheader.phpを開くと39行目あたりに次のような記述があります。
※Twenty Elevenは75行目あたりです。
<?php bloginfo( 'description' ); ?>
bloginfo関数を使ってキャッチフレーズを表示しています。画面でサイト名の下に表示される部分です。
この1行を堅苦しく表現すれば「画面にキャッチフレーズを表示するため、bloginfo関数に'description'というパラメータを渡して呼び出す」と言うことができます。堅苦しく考える必要はないのですが、今後WordPressをカスタマイズするにあたって書籍を読む場合はプログラミング用語が出てくるので、少しずつ慣れるように、それぞれのキーワードを簡単に説明していきます。
関数に渡す「パラメータ」
「bloginfo( 'description' )」の「description」ように関数の括弧の中に指定する項目のことを「パラメータ」といいます。パラメータの役割は、どのような動作をするのか指定することです。bloginfo関数はブログ情報を表示する関数ですが、「description」を指定することで、ブログのキャッチフレーズが表示されます。そのような細かい動作の指示を行うときに使うのがパラメータです。
パラメータは呼び出す関数の括弧( )の中に指定し、複数のパラメータがある場合はカンマで区切ります。PHP以外のプログラミング言語でもほぼ共通の作法です。
○関数とパラメータのイメージ
関数(パラメータ)
○複数のパラメータを持つ関数
関数( パラメータ1, パラメータ2, パラメータ3)
パラメータを持たない関数もありますし、パラメータを指定可能であっても省略できる関数もあります。パラメータの使い方は、関数によってさまざまです。また、厳密には関数に「渡すことができる」のがパラメータで、プログラムで「実際に渡した」値のことは「引数」といいます。まぎらわしくなるかもしれないので、ここでは便宜上、関数に渡すものを「パラメータ」という言葉で統一します。
関数から受け取る「戻り値」
関数に渡すパラメータと一緒に覚えておきたいのが「戻り値」です。関数の実行結果として返される値で、たとえばget_bloginfo関数を実行すると、ブログ情報が戻り値として返されます。急に難しくなったように感じるかもしれませんが、bloginfo関数との対比で考えるとわかりやすいです。
ブログ情報を画面に表示するbloginfo関数とは異なり、get_bloginfo関数ではブログ情報を画面に表示せず、いったん受け取ってから次のステップで表示するというワンクッションをおくということです。
○似たような名前の2つの関数
bloginfo関数 --- ブログ情報を表示する
get_bloginfo関数 --- ブログ情報をいったん受け取る(中身を吟味してから表示する)
関数を呼び出した人が関数の実行結果を「受け取る」を逆の立場、つまり、呼び出された関数から見れば、実行結果を呼び出し元に「返す」と表現できます。その返す内容(値)のことを「戻り値」と言います。関数の呼び出しと、戻り値の受け取りの関係を図でイメージしておきましょう。
bloginfo関数の変わりにget_bloginfo関数を使う理由
関数の呼び出しと実行結果の受け取りの流れはイメージできたかと思います。なぜ「いったん戻り値を受け取ってから…」のような面倒なことをするのか、詳しくは別の機会に説明しますが、簡単に言えば、中身が問題ないか吟味してから表示するためです。
具体的にTwenty TwelveやTwenty Elevenでは、サイトのキャッチフレーズが空っぽでないかどうか調べてから画面に表示するというチェックをはさむためにget_bloginfo関数が使われています。
$site_description = get_bloginfo( 'description', 'display' ); if ( $site_description && ( is_home() || is_front_page() ) ) echo " | $site_description"; …略…
$site_descriptionにキャッチフレーズを取り出して、「if ( $site_description …)」の部分で、$site_description(キャッチフレーズ)が空っぽかどうかチェックしています。これだけのコードでなぜ「空っぽかどうか」のチェックになるのか、今日は説明を省略しますが、この部分の役割は理解できたでしょうか。
要は、空かどうかチェックせずに「サイト名 | キャッチフレーズ」という構成でキャッチフレーズを画面に表示するコードの場合、キャッチフレーズが空のときは「サイト名 |」のように無駄な棒が表示されてしまうということです。
このようにしてbloginfo関数とget_bloginfo関数が使い分けられています。