5

我需要一些用于 WordPress 插件的 CSS 是动态的,并且想知道什么是最好的或最常用的方法。我目前正在使用方法二,但 IE9 有问题。所以我认为动态 CSS 可能有更好的解决方案,并提出了这些:

1.) 包含一个带有wp_head钩子的样式块

临:

  • 没有额外的服务器请求

反对:

  • 根据每页上的大量数据的大小
  • 不那么漂亮
  • 不可缓存

2.)admin_url('admin-ajax.php?action=my_css')在链接标签中使用

临:

  • 即时创建 CSS(并使用 Transient API 缓存它)
  • 用途wp_enqueue_style
  • 可缓存的过期标头

魂斗罗

  • 需要加载wp-load.php
  • 在 IE9 上不起作用(为什么?

3.) 创建一个关于更改的 CSS 文件

  • 快速地
  • 无需加载整个 WordPress ( wp-load.php)

魂斗罗

  • 不是很动态
  • 需要某些文件夹的写入规则
  • 可能已过期或缺少脚本问题或缺少权限的原因

我不喜欢方法一,因为不是每个页面都需要样式,方法二在 IE9 上不起作用。

我应该选择第三个还是有什么缺点?

提前致谢!

4

2 回答 2

1

PHP 没有内置的持久缓存,您会受到一定程度的限制。如果您可以保证您将拥有memcached、、APC甚至是文件写入权限,那么您可以使用这些方法中的任何一种来缓存您的 CSS,并使用密钥检索它。您不需wp-load.php要这样做,因此您的性能将比必须加载所有插件等有所提高。

也就是说,根据 Microsoft 文章MIME-Handling Change: text/css ,假设您在输出 CSS 之前进行了设置,那么您的动态 CSS应该可以在 IE9 中工作。header('Content-type: text/css');

综上所述,您可以尝试#1 和#2 的混合方法-如果您不能保证您具有文件写入权限,那么听起来#3 已经过时了。要实现,只需检测user-agent请求浏览器的,并设置一个函数来输出您的 CSS。如果不是IE9,您可以使用钩子函数包含样式表admin_url('admin-ajax.php?action=my_css')并调用您的输出,如果IE9,您可以通过从钩子调用函数将样式表包含在标头中wp_head。这样,您就可以为大多数客户端缓存 CSS,并为 IE 解决问题 - 您对页面大小等的缺点是有效的……但它是 IE9。

只要您能够缓存每个客户端的 CSS,那么您通常只查看一个额外的请求,wp-load.php该请求不应该对性能造成太大影响。

您可以使用检查 IE9if (false!==strpos('MSIE 9;', $_SERVER['HTTP_USER_AGENT']))

于 2012-10-22T01:47:00.280 回答
1

我创建了一个名为wp-dynamic-css的库,它允许您从动态内容生成 CSS。

该库允许您使用特殊语法来表示 CSS 文件中的变量。

这是它的使用方法:

// 1. Load the library
require_once 'wp-dynamic-css/bootstrap.php';

// 2. Enqueue the stylesheet (using an absolute path, not URL)
wp_dynamic_css_enqueue( 'my-dynamic-style', 'path/to/my-style.css' );

// 3. Set the callback function (used to convert variables to actual values)
function my_dynamic_css_callback( $var_name )
{
   return get_theme_mod($var_name);
}
wp_dynamic_css_set_callback( 'my-dynamic-style', 'my_dynamic_css_callback' );

现在假设您有一个my-style.css使用以下代码调用的文件:

body {
   background-color: $body_bg_color;
}

例如,如果调用get_theme_mod('body_bg_color')返回 value #fffmy-style.css则将编译为:

body {
   background-color: #fff;
}
于 2016-03-20T05:56:56.310 回答