将版本号分配给子主题的主样式表


12

在header.php中,我想将版本号归于样式表,以便浏览器被迫刷新它。但是在处理子主题时,不会明确调用其样式表,而是由WordPress自动查找。那么如何或在何处将版本号归属于子主题的样式表?

Answers:


5

您可以在子主题样式表本身中更新版本。

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Twenty Fourteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Update here
*/

您是否肯定会刷新所有缓存的样式表并强制加载新版本,就像在header.php中添加版本号一样?
drake035

是的,如果您查看页面源代码,则在更改子主题style.css中的版本号时,查询字符串将更新。
Matt Royal

7
这仍然有效吗?对我来说,更改子主题的style.css中的版本没有区别-头部中的style.css查询字符串仍然作为Wordpress版本号出现(在本例中为4.1.1)。
蒂姆·马隆

2
这取决于您的主题设置方式。向下查看页面@kraftner答案。如果您的主题是注销,然后重新注册文件,则此操作无效。
马特·

4
换个样子,默认版本现在基于WP版本。因此,此答案不再有效!(github.com/WordPress/WordPress/blob/...
马特皇家

14

我认为最好的方法是将子主题样式表(style.css)留空,仅包含必要的注释(例如主题名称,描述等,以便wordpress可以识别您的主题),然后在您的文件中创建另一个CSS文件-主题名称文件夹/css/main.css

之后,在function.php上,每次更改文件时,您都可以拥有一个新的“版本”:

function my_scripts_and_styles(){

$cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css'));
wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' );

}

add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1);

逻辑:

每次保存文件时,文件的修改时间都会更改。新的时间将传递给date函数,以将时间(filemtime返回代表时间的整数)转换为日期格式,以使其成为所需格式的字符串。在我们的示例中,时间的格式化精度为分钟。您可以将其更改为跟踪第二个"YmdHis"时间,即。之后,文件的新修改时间将作为新版本传递给wp_enqueue_style

参考:

http://www.php.net/filemtime

http://php.net/manual/zh/function.date.php


2
我更喜欢使用主题版本作为缓存破坏者。如果使用,$cache_buster = wp_get_theme()->get('Version')您将在中的注释块中指定版本style.css。请参阅codex.wordpress.org/Function_Reference/wp_get_theme以获取参考。
MarcelStör16年

尼斯不知道此功能的存在。但是同样,您每次进行更改时都必须手动更改版本,尤其是在开发时(由于缓存问题),它可能会很受挫。另外,即使您在其中导入main.css文件,您也必须在style.css中进行编码,顺便说一句,我认为这不是一个好方法。此外,如果您使用SASS进行编码,可能会再次难以维护它。最后,我认为检查文件时间比打开文件,阅读第一条注释并找到版本要快(我不确定是否wp_get_theme()->get('Version')可以那样工作)。
Laxmana'1

是的,但从积极的一面来说,您可以更好地控制自己的样式。您可以逐步更新CSS,对结果感到满意后,您最终可以修改版本并“发布”它。
MarcelStör16年

1
将其“释放”给返回站点的用户。新用户可以看到文件中的内容。
ryanrain '17

10

您需要做的是通过句柄注销主要样式,然后用您的版本号重新注册。在这种情况下,手柄为style-css

您可以通过查看呈现的样式表链接来确定需要使用的句柄:

<link rel='stylesheet' id='style-css-css'  href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' />

这是ID,style-css-css这意味着我们的句柄是style-css

将其放在您的儿童主题的function.php中:

function wpse_145141_change_style_version(){
    // First de-register the main stylesheet
    wp_deregister_style( 'style-css' );
    // Then add it again, using your custom version number
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    //finally enqueue it again
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');

1

当前的最高答案取决于主题,因为它要求主题开发人员将子主题版本号放入变量中,然后在排队时将其附加到子style.css中。我在某些主题上看到了这一点,但不是很多。以下内容适用于在functions.php中注册了子样式的任何主题-无法与旧的@import规则一起使用,而我再也没有看到过。

在子主题的functions.php中,您应该具有类似以下内容:

// enqueue the child theme stylesheet

function wp_schools_enqueue_scripts() {
  wp_register_style( 'childstyle', get_stylesheet_directory_uri() . '/style.css'  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

如果将其更改为以下内容,则每次保存文件时都会在其后附加一个时间戳作为版本号,从而使样式表的每次更改都能通过本地缓存进行破坏:

 // enqueue the child theme stylesheet

 function wp_schools_enqueue_scripts() {
   wp_register_style( 
     'childstyle', 
     get_stylesheet_directory_uri() . '/style.css', 
     array(), 
     filemtime( get_stylesheet_directory() . '/style.css' ) 
   );
   wp_enqueue_style( 'childstyle' );
 }
 add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

希望这对某人有帮助。我在我积极管理的每个站点上都使用它。


0

我相信,如果您使用Wordpress主题编辑器来编辑子主题的样式表,则每次保存文件时它将自动附加新的版本号。


1
是的,但是我不使用WP编辑器来处理样式表
。–

0

我通常不使用默认的style.css,而是在子主题的functions.php或其他包含的php文件中使用wp_enqueue_style。因此,您仍然在子主题中保留了style.css以及所有子主题的详细信息,但是您可以在子主题中拥有一个单独的css文件,以进行实际的子主题样式设置(我通常将其放在资产/ css中子主题中的目录)。这还允许您使用第4个参数设置CSS版本。例如:

function theme_name_child_scripts() {
    wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen');
}

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' );

如果未按正确的顺序加载操作,则可以为该操作添加优先级,或者使用上述wp_enqueue_style中的依赖项参数进行操作:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.