前の記事 「カスタムヘッダーを表示する – [3]」 までで
WordPress の管理画面で変更できるカスタムヘッダーを利用できるよう
一通りの記述が本当は終わったハズでした。
ですが、現状では、
WordPress 3.9 の場合は、WordPress 本体のバグのために、
管理画面 [外観 - ヘッダー] で PHP Argument の Warning が出ます。
詳細は、WordPress のバグ 「【カスタムヘッダー】 arrayエラー」 にて。
今回は、これらのバグが表面化しないように、対応するコードを
function.php に追記していきます。
WordPress 3.9.1 以降では、この現象は解消されているっぽいので、
不要かも知れませんが、一般に公開する WordPress テーマであれば
対応しておく方がいいでしょう。
バグ紹介のページから読み取れるかとは思いますが、
管理画面でカスタムヘッダーが設定される際には、WordPress 本体の
/wp-admin/custom-header.php にあるクラスが主たる仕事をします。
Warning を吐いているのは、get_default_header_images 関数 ですが、
根本的な原因は、クラス内の $default_headers 変数や
グローバルの $_wp_default_headers 変数が
配列として初期化されていないことに起因します。
これを解消するために、register_default_headers 関数を使用して、
グローバルである $_wp_default_headers 変数に
明示的に、デフォルトヘッダ画像を (配列として) エントリしてやります。
function.php に追記するコードは以下のようになります。
※ function.php のどこに追記するかは特に問題にはならないはずです。
コードを記述する場所と、実際に処理 (イベント) が発生するタイミングは違いますので。
//--- デフォルトのカスタムヘッダー画像を登録(複数用意して選択肢とする) register_default_headers(array( 'photo-green' => array( 'url' => '%s/images/header_photo-sky.jpg', // ヘッダー画像のアドレス 'thumbnail_url' => '%s/images/thum_photo-sky.jpg', // ヘッダー画像のサムネイルのアドレス 'description' => '青空' // ヘッダー画像の説明や日本語名など(省略可) ) ));
デフォルト (で選択できる) カスタムヘッダー画像の属性を指定した連想配列の
配列を、register_default_headers 関数のパラメータで指定して登録します。
またまた、WordPress Codex 日本語版 では
この関数についてのリファレンスはありません。 (日本語未翻訳 orz)
英語版のリファレンスはココ ↓
WordPress Codex : Function Reference/register default headers
ここでミソなのは、連想配列の配列を与えなくてはいけないということです。
たとえ登録したい画像が1つだけだったとしても、必ず多次元配列とする必要があります。
何だこの糞仕様・・・
【独り言】
与えられたパラメータが単なる配列か多次元配列かぐらいは、関数内で
ちゃんとジャッジして分岐すればいいし、それをやらないぐらいだったら、
グローバル変数の初期化処理ぐらいちゃんとやっとけバカヤロー (怒)
上記記述例では、1つだけの画像を登録してるので、
最上位次元の配列要素が1つのみですが、複数の画像を登録して
デフォルトで色々選ばせてあげたい場合は、当然、
最上位次元の要素 (の中の連想配列) を増やしてやればいいわけです。
これで、管理画面 [外観 - カスタマイズ] からの設定だけであれば、
カスタムヘッダーを利用するためのコードの記述は終了です。
そう、いつものごとく引っかかる言い方です (笑)
と言うのも、実はまだ、管理画面 [外観 - ヘッダー] で設定する際の
挙動におかしさがあるのです。
これも WordPress 本体の制御が悪いのですが、ここの画面で、
文字色を変更する操作をした場合はリアルタイムにプレビューに反映されるのですが、
ヘッダーのテキストを表示するかどうかを変更したり、ヘッダー画像を選択したりする
操作はリアルタイムにプレビューに反映されず、「変更を保存」しないと
プレビューエリアで確認することができません。
出たな・・・またこの糞仕様 orz
ただ、これを解消するには、結構ちゃんと JavaScript を書いて、
それを WordPress にスクリプトとしてロードさせないといけないので、
また後々 (追々) 解説します。
ですので、「カスタムヘッダーを表示する」編は一旦完了とし、
次回からは他の解説に移ります。
では。