記事一覧

カスタムヘッダーを表示する – [4]

 posted by suzu
テンプレート作成のススメ

前の記事 「カスタムヘッダーを表示する – [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 にスクリプトとしてロードさせないといけないので、
また後々 (追々) 解説します。

ですので、「カスタムヘッダーを表示する」編は一旦完了とし、
次回からは他の解説に移ります。
では。

関連記事

eyecatch_template

home.php を作成する

今回は、ブログ投稿インデックス (一覧) ページである home.php を作成...

記事を読む

eyecatch_template

フィードリンクを追加する

色々紆余曲折 (詳細は後日記事にします) あって少し時間が空いてしまいましたが、...

記事を読む

eyecatch_template

404.php を作成する

今回は、リクエストされたページがなかった際に表示する 404.php を作成しま...

記事を読む

カレンダー

2019年8月
« 7月    
 123
45678910
11121314151617
18192021222324
25262728293031
PAGE TOP ↑