header_textcolor を削除すると display_header_text が無効化する

WordPress のロゴ

"ヘッダーテキスト色" は WordPress に標準で備わっているテーマのカスタマイズ機能の 1 つです。 このカスタマイズ機能を削除するには登録済みのパラメータ header_textcolor を削除します。

ところが header_textcolor を削除すると、それとは別のテーマのカスタマイズ機能 "ヘッダーテキストを表示する" が機能しなくなります。 "ヘッダーテキストを表示する" は、パラメータ display_header_text で管理されます。

発生する問題

次のような問題が確認できます。

  1. "ヘッダーテキストを表示する" のチェックボックスが切り替わらない。
  2. チェックボックスの入力状態が保存されない。
  3. パラメータ transport の値が refresh / postMessage のいずれでも動作しない。
  4. transport の値が refresh であっても再読み込み(転送)されません。

問題は WordPress 4.2 で起きることを確認しました。

問題の原因

標準のカスタマイズ機能は /wp-includes/class-wp-customize-manager.php ファイルで定義されています。 WordPress 4.2 では、display_header_text に関する項目のソースコードは次のようになっています。

$this->add_control( 'display_header_text', array(
    'settings' => 'header_textcolor',
    'label'    => __( 'Display Header Text' ),
    'section'  => 'title_tagline',
    'type'     => 'checkbox',
) );

パラメータ settings の値に header_textcolor が与えられています。 つまり、header_textcolor を削除すると settings の参照先がなくなり、 display_header_text が機能しなくなります。

なぜこのような仕様にしているのかは良く分かりません。 開発者フォーラムや開発の履歴を追えば確認することが出来るでしょうが、問題の解決に至るわけではありませんので、割愛します。

また執筆時点で settings について詳細に説明する公式ページは見当たらないので、詳細が必要であれば関連するソースコードを読む必要があります。

Theme Customization API - WordPress.org