主题定制器可以用于生成静态/可缓存的CSS吗?如何生成?

时间:2018-09-05 作者:Kitty Cat

我目前正在尝试制作一个可定制的Bootstrap 然而,我个人WordPress网站的主题遇到了一些问题。

可以通过修改SCSS变量来定制引导,我正试图通过利用Leafo\'s scssphp 在使用主题定制器期间动态重新编译引导,然后使用Minify 缩小规模。我目前的代码如下:

// /wp-content/themes/bootstrap/functions.php
function bootstrap_generate_css() {
  require_once(__DIR__ . \'/vendor/autoload.php\');
  $compiler = new Leafo\\ScssPhp\\Compiler();
  $bootstrap_scss = file_get_contents(__DIR__ . \'/vendor/twbs/bootstrap/scss/bootstrap.scss\');
  $compiler->setVariables(array(
    \'primary\' => get_theme_mod(\'bootstrap_colors_primary\', \'#007bff\')
  ));
  $compiler->setImportPaths(__DIR__ . \'/vendor/twbs/bootstrap/scss/\');
  $css = $compiler->compile($bootstrap_scss);
  $minifier = new MatthiasMullie\\Minify\\CSS($css);
  $mincss = $minifier->minify();
  file_put_contents(__DIR__ . \'/bootstrap.css\', $mincss);
}
当设置更改时,似乎也没有一种“正确”的方法来调用函数,所以我通过使用sanitizer_callback:

function bootstrap_sanitize_color($value) {
  bootstrap_generate_css();
  return($value);
}
这使得我可以使用主题定制器自定义颜色,但是,这些更改不会显示在预览框中,只有在发布主题更改,然后手动重新执行bootstrap_generate_css() 作用

因为bootstrap.css, 最好不要将其包括在<head>, 此外,最好不要为每个前端页面视图动态生成,因为为我编译需要1.8秒。我不介意在主题定制器中进行更改时出现这种延迟。

在WordPress中存储已编译CSS的“正确”方法是什么,以及在主题定制器预览中显示更改?

1 个回复
SO网友:Tim Elsass

sanitize\\u回调方法不是编译过程应该发生的地方,这是为了清理正在传递的控件的设置值。

最初是在BoldGrid Theme Framework, 我们也使用了leafo/scssphp库,但缺少实时预览更改,以及在颜色选择器中更改颜色等简单更改的等待时间很长,这使得测试中的用户体验很差。我们实施了sass.js 此后不久,随着用户的更改,可以在JS中编译scss结果。我们还将编译后的结果保存为theme\\u mod,并读取用户是否在自定义预览或查看变更集。在customize_save_after hook我们仍然使用leafo-scssphp编译器编译并写出内容,因此最终结果是一个CSS文件,其中包含为前端站点加载的编译结果。

总的来说,这以最少的工作量产生了最好的结果。

其他可行的选择包括:

对于您提供给用户访问权限的每个设置,手动编写一些JS,以便通过修改每个控件需要修改的任何属性来更新预览,使其看起来像应该的那样

结束

相关推荐

在加载主题/自定义CSS之后,从某个地方将CSS注入到索引中,覆盖我的所有CSS

使用inspector工具,我可以看到一些CSS是从某个地方(我不知道在哪里)注入/生成的,它覆盖了我自己的CSS。我尝试了几种方法,包括使用子主题,将各种CSS设置为“!important”,尝试编辑引导。css尝试禁用外观自定义程序(因为注入的选项似乎是您在自定义程序中设置的选项,但是删除自定义程序不会起任何作用)。实际上,我只是想要一个样式表,我可以在其中编写代码,但它不会被覆盖,然而这似乎是不可能的,因为不管我做什么,这个css/代码都是最后注入/生成的。注入的代码是标记/注释为//em>文