是否将Get_Theme_mod css内部化到样式表?

时间:2014-10-06 作者:AndrettiMilas

此代码从主题定制器中添加自定义CSS选择。我讨厌这段代码,因为它将样式标记直接输出到网站的html中,而不是将所选内容附加到我的样式表中,或者将它们放在单独的样式表中,这会导致糟糕的编码。

是否有办法将此CSS固定到主题内部样式的末尾。还是生成一个新的样式表来放置它?(或者这是个坏主意?)

function mytheme_customize_css()
{
    ?>
         <style type="text/css">
             html, body, .container { background:<?php echo get_theme_mod(\'primary_color\', \'#000000\'); ?>; }
         </style>
    <?php
}
add_action( \'wp_head\', \'mytheme_customize_css\');

1 个回复
SO网友:gmazzap

我认为遵循此工作流是可行的:

将操作添加到\'updated_option\' 钩子以查看主题mod何时更新,以及何时运行一个函数

获取的内容style.css 作为字符串使用file_get_contentsstyle.css 字符串将新字符串写入一个新的css文件,将其保存在一个可访问的文件夹中,也可以保存在uploas文件夹的子目录中(该文件夹应可由WordPress写入),使用file_put_contents

  • 如果文件操作出错(总是可能发生),请使用OP中的代码作为回退过滤器\'stylesheet_uri\' 钩子返回自定义文件的url(如果存在)

    在主题中,请确保使用get_stylesheet_uri()

  • So点#1代码:

    add_action( \'updated_option\', function( $option ) {
      $theme = get_option( \'stylesheet\' );
      if ( $option === "theme_mods_{$theme}" ) {
        my_update_stylesheet();
      }
    });
    
    function my_update_stylesheet() {
      $css = @file_get_contents( get_template_directory() . \'/style.css\' );
      if ( ! $css ) { // if we can\'t read file use your function in OP as fallback
        add_action( \'wp_head\', \'mytheme_customize_css\');
      }
      $color = get_theme_mod(\'primary_color\', \'#000000\');
      $css .= PHP_EOL . sprintf( \'html, body, .container { background:%s; }\', $color );
      $upload = wp_upload_dir(); 
      $path = $upload[\'basedir\'] . \'/thememod\';
      if ( ! is_dir( $path ) ) {
         wp_mkdir_p( $path );
      }
      $newfile = @file_put_contents( $path . \'/style.css\', $css );
      if ( ! $newfile ) { // if we can\'t write file use your function in OP as fallback
        add_action( \'wp_head\', \'mytheme_customize_css\');
      }
    }
    
    和点#2

    add_filter( \'stylesheet_uri\', function( $uri ) {
      $upload = wp_upload_dir(); 
      if ( file_exists( $upload[\'basedir\'] . \'/thememod/style.css\' ) ) {
        $uri = $upload[\'baseurl\'] . \'/thememod/style.css\';
      }
      return $uri;
    });
    

    结束

    相关推荐