WordPressテンプレートでよく見かける「printf」や「sprintf」という命令はWordPress関数ではなくPHPの関数です。
このprintf関数やsprintf関数は文字列を整形して表示するときに使います。わかりやすく言えば一部のみを置き換えた文字列を組み立てるときに使います。
たとえば、サイト内を検索したとき検索結果のページには「検索結果: WordPress」のような文字列が表示されます。
この「検索結果: WordPress」のうち、「WordPress」は検索キーワードに応じて毎回変わる文字列ですが、「検索結果:」は毎回同じです。
このように一部のみが変化する文字列を組み立てるときに役立つのがPHPのprintf関数です。
具体的には次のようなコードを実行すると上記の文字列を組み立てることができます。
<?php printf('検索結果: %s', 'WordPress'); ?>
最初のパラメータ「検索結果: %s」のうち、「%s」が毎回置き換える目印です。実際に置き換えられる文字列は2番目のパラメータ「WordPress」です。結果として、「検索結果: WordPress」という文字列に整形されて表示されます。
WordPressに限りませんがサイト制作では一部のみが置き換わる文字列が膨大にあります。
- アーカイブページ — 「月別アーカイブ: 2015年4月」の年月のみが置き換わる
- 投稿者ページ — 「西沢直木のすべての投稿」の投稿者名だけが置き換わる
- 2ページ目以降のタイトル — 「サンプルPC教室 | ページ 2」のページ番号だけが置き換わる
このように一部だけが置き換わる文字列を組み立てる場面でprintf関数やsprintf関数が使われています。どちらも用途は同じですがprintf関数が処理結果を画面に表示するのに対してsprintf関数は処理結果を変数などに格納するときに使います。
それぞれの関数について詳しくは、以下のページをご覧ください。
printf関数やsprintf関数の解読が難しい理由
テンプレートを開くとアチコチにprintf関数が見つかりますが他の関数と組み合わせられているため、パッと見て解読しづらく感じるかもしれません。
たとえば、上記で紹介した「検索結果:WordPress」を組み立てるコードも上記のように単純ではありません。Twenty Fourteenのsearch.phpには次のように記述されています。
<?php printf( __( 'Search Results for: %s', 'twentyfourteen' ), get_search_query() ); ?>
「__」は文字列を翻訳するWordPress関数です。「Search Results for: %s」が翻訳されて「検索結果: %s」になります。この「%s」がget_search_queryで取得した検索キーワードに置き換えられて「検索結果:WordPress」になる仕組みです。
テンプレートのprintf関数はこのように翻訳関数の__と組み合わせて使われるのが定番です。少しわかりづらいかもしれませんが、「まずは、__関数で翻訳、続いてprintf関数で整形」の2段階がイメージできれば理解しやすくなります。
それをふまえて次のコードを解読してみましょう。Twenty Fifteenのcontent.phpに記述されているコードです。
the_content( sprintf( __( 'Continue reading %s', 'twentyfifteen' ), the_title( '<span class="screen-reader-text">', '</span>', false ) ) );
sprintfの外側に、投稿の本文を表示するthe_contentがあり、さらにわかりづらくなっていますが、少しずつ解読していきましょう。
- the_title関数 — 「<span class=”screen-reader-text”>ページのタイトル</span>
- __関数 — 「Continue reading %s」を「続きを読む %s」に翻訳
- sprintf関数 — 上記の%sを「<span class=”screen-reader-text”>ページのタイトル</span>」に置き換える
- the_content関数 — 組み立てた文字列を使って「続きを読む→」リンクを出力
」という文字列を組み立てる
結果として、記事一覧ページでは「続きを読む」リンクが表示されます。