web-dev-qa-db-ja.com

custom-header.phpでヘッダーテキスト(タイトルとタグライン)を非表示にします

私は現在、テーマ開発スキルを強化しようとしていますが、まだ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です。

上記の考慮事項とは対照的に、すべてが正しく機能します。

私のテーマにこの問題を単に「コピー-貼り付け」たくありません。理解したいのです。私の思考エラーはどこにありますか?

1

まず、カスタマイザでDisplay Site Title and Taglineのチェックを外すと、Header Text Colorに既に入力した値は関係ありません。カスタマイザはそれをblank(空の文字列ではなく、実際のテキスト「空白」)として保存しますあなたSave & Publishwp_optionsorカスタマイザーから移動した後、var_dump()を試してから、データベースのSave & Publishテーブルでこれを確認できます。

get_header_textcolor()blankを返し、get_theme_support( 'custom-header', 'default-text-color' )000000を返すため、上記のif条件では一致しないため、非表示になります。

次に、カスタマイザーが保存後にページをリロードせず、保存前にTitleTaglineの表示/非表示に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';

したがって、ロジックは正しかったのですが、値が間違っていました。

1
Fayaz