web-dev-qa-db-ja.com

カスタマイザ:カスタマイザCSSのデフォルト値を出力する

下記のコードをWordPress テーマカスタマイズAPI と、カスタマイザCSSをheadに出力するためのいくつかのテーマで見ました。うまく機能しますが、header_textcolorbackground_color、またはlink_textcolorに値が指定されていない場合、デフォルト値を表示するように変更できるかどうか疑問に思います。

public static function header_output() {
  ?>
  <!--Customizer CSS--> 
  <style type="text/css">
       <?php self::generate_css('#site-title a', 'color', 'header_textcolor', '#'); ?> 
       <?php self::generate_css('body', 'background-color', 'background_color', '#'); ?> 
       <?php self::generate_css('a', 'color', 'link_textcolor'); ?>
  </style> 
  <!--/Customizer CSS-->
  <?php
}

public static function generate_css( $selector, $style, $mod_name, $prefix='', $postfix='', $echo=true ) {
  $return = '';
  $mod = get_theme_mod($mod_name);
  if ( ! empty( $mod ) ) {
     $return = sprintf('%s { %s:%s; }',
        $selector,
        $style,
        $prefix.$mod.$postfix
     );
     if ( $echo ) {
        echo $return;
     }
  }
  return $return;
}
1
Troy Templeman

get_theme_mod()にデフォルト値を設定するには、これを2番目の引数として渡すことができます。

$mod = get_theme_mod( 'header_textcolor', '#000000' );

#000000に値が保存されていない場合はheader_textcolorを出力します。

あなたのget_theme_mod()呼び出しは他の関数generate_css()から設定を取得しているので、あなたはデフォルトをも送るためにその関数を更新する必要があるでしょう:

public static function generate_css( $selector, $style, $mod_name, $default, $prefix='', $postfix='', $echo=true ) {
    $return = '';
    $mod = get_theme_mod( $mod_name, $default );

その例では$mod_nameの後に追加しました。

その後、デフォルト値を含むようにheader_output()関数を更新します。

public static function header_output() {
  ?>
  <!--Customizer CSS--> 
  <style type="text/css">
       <?php self::generate_css('#site-title a', 'color', 'header_textcolor', '#000000', '#'); ?> 
       <?php self::generate_css('body', 'background-color', 'background_color', '#FFFFFF', '#'); ?> 
       <?php self::generate_css('a', 'color', 'link_textcolor', '#0000FF' ); ?>
  </style> 
  <!--/Customizer CSS-->
  <?php
}

これらの色にはデフォルト値があります。

ただし、テーマのmodに値が設定されていないと、コードがCSSを出力しないことを指摘しておく価値があると思います。これはデフォルトのスタイルがあなたのスタイルシートから来ることを意味します。だから私はここでデフォルト値を持つことが必要かどうかわからない。

1
Jacob Peattie