テーマを自作していると、ヘッダーに表示するサイト名やキャッチフレーズ、<head> 内の文字コードなど、サイトの基本情報をテンプレートに埋め込みたくなります。これらを設定から動的に取り出すための関数が get_bloginfo() と bloginfo() です。この記事では、2つの違い、引数(show パラメータ)で何が取れるのか、そして実際のテーマファイルでの安全な書き方を、初心者の方にも分かるように解説します。
目次
get_bloginfo() で何ができるのか
get_bloginfo() は、WordPress の管理画面「設定 > 一般」などに登録されているサイトの基本情報を取得する関数です。引数に「どの情報がほしいか」を表す文字列(show パラメータ)を渡すと、それに対応した値が返ってきます。たとえばサイト名、キャッチフレーズ、サイト URL、文字コード、WordPress のバージョンなどを、コードに直接書かずに取り出せます。
サイト名やキャッチフレーズをテンプレートにベタ書きしてしまうと、管理画面で名前を変えても表示は古いまま、という食い違いが起きます。get_bloginfo() を使えば設定の値をそのまま参照できるので、管理画面で変更すればサイト全体に反映されます。
get_bloginfo() と bloginfo() の違い
よく似た名前の関数が2つあります。違いは「値を返すか」「その場で出力するか」の1点だけです。受け取る引数(show パラメータ)はどちらも同じです。
| 関数 | 動作 |
|---|---|
get_bloginfo( $show ) | 情報を取得して返す(自分で echo する必要がある) |
bloginfo( $show ) | 情報をその場で直接出力する(echo 不要) |
つまり bloginfo( 'name' ) は、内部的には echo get_bloginfo( 'name' ) とほぼ同じです。次のコードはどちらも同じ結果になります。
<?php
// 取得して、自分で echo する
echo get_bloginfo( 'name' );
// その場で直接出力する(echo は不要)
bloginfo( 'name' );
取得した値を変数に入れたい、条件で加工したい、関数の引数に渡したい、というときは get_bloginfo() を使います。単純にテンプレートへ表示するだけなら bloginfo() のほうが短く書けます。ただし後述するエスケープの都合で、実務では echo esc_html( get_bloginfo( ... ) ) の形をおすすめします。
show パラメータ(引数)で取得できる情報
第1引数に渡す文字列によって、取得できる情報が変わります。よく使う主要なものを一覧にまとめました。
| show パラメータ | 取得できる情報 |
|---|---|
'name' | サイトのタイトル(サイト名) |
'description' | キャッチフレーズ(サイトの説明) |
'url' | サイトのアドレス URL(home_url() 相当) |
'wpurl' | WordPress アドレス URL(site_url() 相当) |
'admin_email' | 管理者のメールアドレス |
'charset' | 文字コード(通常 UTF-8) |
'version' | WordPress 本体のバージョン番号 |
'language' | サイトの言語コード(例: ja) |
'stylesheet_url' | 有効なテーマの style.css の URL |
'template_url' | テンプレート(親テーマ)ディレクトリの URL |
'stylesheet_directory' | 有効なテーマ(子テーマ含む)ディレクトリの URL |
'html_type' | サイトの HTML タイプ(通常 text/html) |
'name' と 'description' が「設定 > 一般」のサイトのタイトルとキャッチフレーズに対応します。サイト構築でいちばん使う2つなので、まずここを押さえておけば十分です。
header.php でサイト名とキャッチフレーズを出力する
もっとも典型的な使い方が、テーマの header.php でサイト名とキャッチフレーズを表示するケースです。次の例では、トップページではサイト名を <h1> で、それ以外のページでは <p> で出力しています。
<header class="site-header">
<?php // サイトのロゴ部分。トップへ戻るリンクにする ?>
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="site-title">
<?php echo esc_html( get_bloginfo( 'name' ) ); ?>
</a>
<?php // キャッチフレーズ。設定されているときだけ表示する ?>
<?php $description = get_bloginfo( 'description' ); ?>
<?php if ( $description ) : ?>
<p class="site-description">
<?php echo esc_html( $description ); ?>
</p>
<?php endif; ?>
</header>
キャッチフレーズは管理画面で空にできるため、get_bloginfo( 'description' ) が空文字を返すことがあります。空のまま <p> を出力すると無駄なタグが残るので、上の例のように値があるときだけ表示する分岐を入れておくと丁寧です。
<head> 内では、文字コードの指定にも使えます。charset を取得して <meta> に渡しておけば、設定に合わせた文字コードが出力されます。
<meta charset="<?php bloginfo( 'charset' ); ?>">
get_bloginfo(‘url’) と home_url() / site_url() の違い
URL を取得する手段として、get_bloginfo( 'url' ) と home_url() はどちらもサイトの表側(訪問者が見る)アドレスを返します。同様に get_bloginfo( 'wpurl' ) は site_url() 相当の値を返します。結果はほぼ同じですが、使い分けの基準があります。
大きな違いはパスを連結できるかどうかです。home_url( '/contact' ) のように引数でパスを足せるのに対し、get_bloginfo( 'url' ) はサイトのトップ URL を返すだけで、パス連結の機能はありません。そのため、リンク先や任意のページの URL を組み立てたい場合は home_url() を、単にサイトのトップアドレスを表示したいだけなら get_bloginfo( 'url' ) でも構いません。新しく書くコードでは URL 系は home_url() / site_url() に寄せておくと、引数でパスを足せるぶん扱いやすくなります。
出力前のエスケープを忘れない
サイト名やキャッチフレーズは管理者が自由に入力できる値です。そのまま HTML に出力すると、設定値に < や " などの記号が含まれていた場合に表示が崩れたり、意図しないタグが混ざったりする恐れがあります。出力の直前で必ずエスケープしましょう。
用途によって使う関数が変わります。テキストとして表示する値は esc_html()、URL として href や src に入れる値は esc_url()、HTML 属性の中に入れる値は esc_attr() を使うのが基本です。
<?php // テキストとして表示する → esc_html() ?>
<?php echo esc_html( get_bloginfo( 'name' ) ); ?>
<?php // URL として使う → esc_url() ?>
<a href="<?php echo esc_url( get_bloginfo( 'url' ) ); ?>">トップ</a>
<?php // 属性値の中で使う → esc_attr() ?>
<meta name="description" content="<?php echo esc_attr( get_bloginfo( 'description' ) ); ?>">
bloginfo() はエスケープを挟む余地がないため、こうしたエスケープが必要な箇所では echo esc_html( get_bloginfo( ... ) ) の形で書くのが安全です。なお charset や version のように WordPress 側が用意する固定的な値については、神経質に考えなくても問題は起きにくいですが、ユーザー入力由来の値(name・description など)は必ずエスケープする、と覚えておきましょう。
サイト名やキャッチフレーズが表示されないとき
キャッチフレーズが空になっている
get_bloginfo( 'description' ) が何も返さないときは、まず「設定 > 一般」のキャッチフレーズ欄が空でないかを確認しましょう。インストール直後の初期値のままだったり、意図的に空にしている場合は、当然ながら出力は空になります。空のときにタグを出さない分岐を入れておくと、レイアウトの崩れも防げます。
get_bloginfo() なのに echo を付け忘れている
「コードを書いたのに何も表示されない」というときに多いのが、get_bloginfo() を echo なしで呼んでいるケースです。get_bloginfo() は値を返すだけなので、画面に出すには echo が必要です。その場で出力したいだけなら、はじめから bloginfo() を使うと付け忘れを防げます。
show パラメータの綴りが間違っている
引数の文字列は決まったキーワードです。たとえば 'discription'(typo)や 'site_url' のように、正しくない文字列を渡すと期待した値が返りません。サイト URL は 'url'、WordPress 本体 URL は 'wpurl' というように、上の一覧表のキーを正確に渡しているか見直しましょう。
まとめ
get_bloginfo() と bloginfo() は、サイトの基本情報をテンプレートから動的に取り出すための関数です。要点を振り返っておきましょう。
get_bloginfo()は値を返す/bloginfo()はその場で出力する(引数は共通)- 第1引数の show パラメータで
name・description・charsetなどを取得できる - URL にパスを足したいときは
get_bloginfo( 'url' )よりhome_url()が便利 - name・description などユーザー入力由来の値は
esc_html()などで必ずエスケープする
まずは header.php でサイト名とキャッチフレーズを表示するところから使ってみてください。一覧表のキーを覚えておけば、テーマ作りで必要な情報をすぐに取り出せるようになります。