WordPressのbloginfo()が空引数でnameを返す問題の対策方法

bloginfo()だとbloginfo('name')になる

bloginfo()はWordPress のテンプレートタグの一つで、ブログやウェブサイトの情報を取得して表示するために使用されます。

例えば、bloginfo('name') は以下のようにサイトのタイトルを返します。

※ WordPressの一般設定のサイトのタイトルに「サンプルブログ」が設定されている場合の例です。

PHP
<meta charset="<?php bloginfo('name'); ?>">
HTML
<meta charset="サンプルブログ">

この関数はサイトのさまざまな情報を出力することができるので、WordPressでよく使用されます。

便利な関数ですが、bloginfo()は引数が空、または引数が間違っているとbloginfo('name')を返してしまうという残念な仕様になっています。

bloginfo()のように引数を指定せずに書くと、bloginfo('name') (サイトのタイトル)が表示されてしまいます。

PHP
<meta charset="<?php bloginfo(); ?>">
HTML
<meta charset="サンプルブログ">

また、bloginfo('charset') を bloginfo('charaset') のように間違えて書いた場合も、bloginfo('name')が表示される仕様になっています。

PHP
<meta charset="<?php bloginfo('charaset'); ?>">
HTML
<meta charset="サンプルブログ">

functions.phpでbloginfoをカスタマイズ

前述の問題はfunctions.phpで間違った引数の場合は、わかりやすいエラー文言を返すよう、bloginfoをカスタマイズすれば間違いに気づきやすくなります。

やり方は以下のコードをfunctions.phpに追記するだけです。

PHP
function custom_bloginfo($output, $show) {
  if (!$show) {
    $output = '' . 'bloginfo()の引数がないです。';
  } else if (
    $show != 'name' &&
    $show != 'description' &&
    $show != 'wpurl' &&
    $show != 'url' &&
    $show != 'admin_email' &&
    $show != 'charset' &&
    $show != 'version' &&
    $show != 'html_type' &&
    $show != 'text_direction' &&
    $show != 'language' &&
    $show != 'stylesheet_url' &&
    $show != 'stylesheet_directory' &&
    $show != 'template_url' &&
    $show != 'pingback_url' &&
    $show != 'atom_url' &&
    $show != 'rdf_url' &&
    $show != 'rss_url' &&
    $show != 'rss2_url' &&
    $show != 'comments_atom_url' &&
    $show != 'comments_rss2_url' &&
    $show != 'siteurl' &&
    $show != 'home'
  ) {
    $output = '' . $show . 'はbloginfo()の正しい引数ではありません。';
  }
  return $output;
}
add_filter('bloginfo', 'custom_bloginfo', 10, 2);

functions.phpに追記後にbloginfo()を再度確認すると、返す値が変わっていることが確認できます。

PHP
<meta charset="<?php bloginfo(); ?>">
HTML
<meta charset="❌ bloginfo()の引数がないです。">
PHP
<meta charset="<?php bloginfo('charaset'); ?>">
HTML
<meta charset="❌ charasetはbloginfo()の正しい引数ではありません。">

WordPressのbloginfo()の引数の指定を間違えて、意図せずbloginfo('name')の値を入れてしまっているWebサイトをたまに見かけます。

そのようなミスを防ぐためにも、functions.phpでbloginfoをカスタマイズし、間違いに気づきやすくすることをオススメします。