私は現在、テーマ開発スキルを強化しようとしていますが、まだPHPで学ぶことがたくさんあります。
Underscores
およびTwenty Seventeen
テーマのコードを調査しています。カスタマイザーのSite Title
チェックボックスがオフになっている場合、次のコードが機能する理由と、Display Site Title and Tagline
およびTagline
を非表示にする理由はわかりません。
custom-header.php
で、#000000
のデフォルトのテキスト色を使用してカスタムヘッダーを設定した後、テーマはヘッダースタイルの関数を設定します。
function underscores_header_style() {
$header_text_color = get_header_textcolor();
/*
* If no custom options for text are set, let's bail.
* get_header_textcolor() options: Any hex value, 'blank' to hide text. Default: add_theme_support( 'custom-header' ).
*/
if ( get_theme_support( 'custom-header', 'default-text-color' ) === $header_text_color ) {
return;
}
// If we get this far, we have custom styles. Let's do this.
?>
<style type="text/css">
カスタマイザーでヘッダーテキストの色を#000000
に設定した場合、私の意見では、最初のif
句がtrueになり、return;
が関数と非表示およびそれ以降のスタイリング部分全体を終了するはずです。動作しないはずです。
これまでのところ、var_dump()
とget_header_textcolor()
についてget_theme_support('custom-header', 'default-text-color')
で確認しました。両方の値は000000
です。
上記の考慮事項とは対照的に、すべてが正しく機能します。
私のテーマにこの問題を単に「コピー-貼り付け」たくありません。理解したいのです。私の思考エラーはどこにありますか?
まず、カスタマイザでDisplay Site Title and Tagline
のチェックを外すと、Header Text Color
に既に入力した値は関係ありません。カスタマイザはそれをblank
(空の文字列ではなく、実際のテキスト「空白」)として保存しますあなたSave & Publish
。 wp_options
orカスタマイザーから移動した後、var_dump()
を試してから、データベースのSave & Publish
テーブルでこれを確認できます。
get_header_textcolor()
はblank
を返し、get_theme_support( 'custom-header', 'default-text-color' )
は000000
を返すため、上記のif
条件では一致しないため、非表示になります。
次に、カスタマイザーが保存後にページをリロードせず、保存前にTitle
&Tagline
の表示/非表示にJavaScriptを使用するため、カスタマイザーにいるときにvar_dump()
とget_header_textcolor()
の両方に対してget_theme_support( 'custom-header', 'default-text-color' )
で000000
を取得します。保存後にカスタマイザを閉じると、var_dump()
はget_header_textcolor()
に対してblank
を、get_theme_support( 'custom-header', 'default-text-color' )
に対しては000000
を表示することがわかります。
これは、カスタマイザが値をblank
として wp-admin/js/customize-controls.js
ファイルに保存するために使用する行です。
control.setting.set( to ? last : 'blank' );
また、 wp-includes/class-wp-customize-manager.php
ファイルの_sanitize_header_textcolor
関数では、WordPressにより、blank
が16進形式の有効な色の値とともにheader_textcolor
の有効な入力になることがわかります。
if ( 'blank' === $color )
return 'blank';
したがって、ロジックは正しかったのですが、値が間違っていました。