正在破坏样式.css之外的其他css文件

时间:2010-12-09 作者:FOR

好吧,那么我们可能都熟悉确保在加载页面时刷新主CSS文件的典型方法(破坏浏览器缓存),对吧?

<link rel="stylesheet" type="text/css" media="all"
  href="<?php echo get_stylesheet_uri();
    echo \'?\'.filemtime( get_stylesheet_directory() . \'/style.css\'); ?>" />
我需要在另一个CSS文件上做同样的事情。是的,我的风格。css文件有自己的一组@import“css/myFile.css”,它们工作得很好,但如果你愿意的话,请幽默我。那么,回到页眉。php,就在第一个链接之后,调用wp\\u head()之前:

<?php $cssFile = get_stylesheet_directory_uri().\'/css/other.css\'; ?>
<link rel="stylesheet" type="text/css" media="all"
  href="<?php echo $cssFile; echo \'?\'.filemtime($cssFile); ?>" />
这会导致警告(作为浏览器获取页面时链接的href属性的一部分):

警告:filemtime():stat失败http://localhost/wordpress/wp-content/themes/my_theme/css/other.css

文件的路径似乎构建正确(另一个.css文件也在那里),但filemtime(实际上是stat)在它上面失败了。怎么会?

其他推荐的方式包括样式以外的CSS文件的“最新”版本。css?我应该一起去吗wp_register_style 相反如果是这样。。。我如何告诉wp\\u register\\u style取消浏览器缓存(即:给我css文件的最新版本,即使浏览器缓存了它)?提前感谢

6 个回复
最合适的回答,由SO网友:Denis de Bernardy 整理而成

您在第一次调用中使用了文件的路径,但在第二次调用中使用了其URL。所以这行不通。

SO网友:t31os

我倾向于使用wp_enqueue_style, 当我想阻止缓存时,会在版本中添加一些内容。。

$ver = \'\';
wp_enqueue_style( \'theme_style\', get_bloginfo(\'stylesheet_url\'), false, $ver );
当我想停止缓存时,我更新$ver 会不断变化的东西,比如时间。。

$ver = time();
或者类似的。。

SO网友:prettyboymp

这是我从一个未发布的CDN插件中获得的代码。它将自动替换排队函数使用的ver query\\u var和文件时间:

class CDN_VersionAssets {

    private $default_version = \'\';
    private $root_url;

    public function __construct() {
        $this->root_url = site_url();
    }

    public function initialize() {
        add_filter(\'style_loader_src\', array($this, \'replace_version\'), 10);
        add_filter(\'script_loader_src\', array($this, \'replace_version\'), 10);
        add_filter(\'stylesheet_uri\', array($this, \'replace_version\'), 10);
    }

    public function on_template_redirect() {
        $this->default_version = @filemtime(get_stylesheet_directory().\'/style.css\');
    }

    private function get_version($url) {
        if(0 === strpos($url, $this->root_url)) {
            $parts = parse_url($url);
            $file_path = str_replace(site_url(\'/\'), ABSPATH, $parts[\'scheme\'].\'://\'.$parts[\'host\'].$parts[\'path\']);
            if( !($version = @filemtime($file_path)) ) {
                $version = $this->default_version;
            }
            return $version;
        }
        return false;
    }

    public function replace_version($src) {
        if( $new_version = $this->get_version($src) ) {
            return add_query_arg(\'ver\', $new_version, $src);
        }
        return $src;
    }
}
add_action(\'init\', array(new CDN_VersionAssets(), \'initialize\'));

SO网友:rjb

我F YoU\'D PREFER NoT To UsE THE sTA.NDA.RD sTYLE.Css F我LE FoR YoUR WoRDPREss THEME\'s Css CA.CHE-BUsT我NG TECHN我QUE, HERE\'s A. CoMPLETE WoRK我NG CoDE E十、A.MPLE:

&#十、A.;&#十、A.;
<?PHP&#十、A.;    // PRE五、ENT Css CA.CH我NG&#十、A.;    $Css_L我NK = GET_sTYLEsHEET_D我RECToRY_UR我() . \'/Css/sCREEN.Css\';&#十、A.;    $Css_F我LE = GET_sTYLEsHEET_D我RECToRY() . \'/Css/sCREEN.Css\';&#十、A.;?>&#十、A.;&#十、A.;<L我NK HREF=“”<?PHP ECHo $Css_L我NK . \'?\' . F我LEMT我ME( $Css_F我LE ); ?>“” />&#十、A.;
&#十、A.;&#十、A.;

WoULD REsULT 我N THE FoLLoW我NG HTML oUTPUT:

&#十、A.;&#十、A.;
<L我NK HREF=“”HTTP://E十、A.MPLE.CoM/WP-CoNTENT/THEMEs/THEME-NA.ME/Css/sCREEN.Css?1.3.4.93.8.95.3.0“” />&#十、A.;
&#十、A.;&#十、A.;

FoR TERsENEss oF TH我s E十、A.MPLE, 我 E十、CLUDED REL=“”sTYLEsHEET“” TYPE=“”TE十、T/Css“” oN THE <L我NK> ELEMENT, so BE sURE To A.DD THosE A.TTR我BUTEs To YoUR F我NA.L MA.RKUP.

&#十、A.;

SO网友:kingkool68

我为这样的工作编写了自己的小函数作为插件。它有两个参数,需要追加的路径和日期格式。下面是一个示例用法。。。

<?php echo cache_busting_path(\'/css/reset.css\', \'Y-m-d_g:i:s\'); ?>
这将导致http://pewsocialtrends.org/wp-content/themes/pew-socialtrends/css/reset.css?2010-11-11_6:47:45

代码如下:

    <?php
/*
        Plugin Name: Cache Busting Path
        Description: Function that returns a path with a cache-busting query string based on the last time the file was updated.
        Version: 1.0
        Author: Russell Heimlich
        Author URI: http://www.russellheimlich.com/blog/
        License: GPL2
    */

        function cache_busting_path($path, $time_format = \'U\') {
            if( $path[0] != \'/\' ) { //Checks for the first character in $path is a slash and adds it if it isn\'t. 
                $path = \'/\' . $path;
            }
            return get_bloginfo(\'template_url\') . $path . \'?\' . date($time_format, filemtime( get_theme_root() . \'/\' . get_template() . $path ) );
        }
?>

SO网友:kaiser

简单:使用URl加载样式和路径以获取filemtime():

wp_register_style(
    \'handle\',
    get_stylesheet/template_directory_uri().\'/path/to/your/stylesheet.css\',
    array( \'possible_dependency\' ),
    filemtime( plugin_dir_path( __FILE__ ).\'path/to/your/stylesheet.css\' )
);
生成的URl如下所示

<link href="http://example.com/wp-content/themes/path/to/your/stylesheet.css?1379012967924">

结束

相关推荐

为什么每个页面都添加了adadtStyles-css样式表链接?

通过查看我网站上任何WordPress页面的来源,我可以看到以下样式表链接:<link rel=\'stylesheet\' id=\'adoptStyles-css\' href=\'http://mydomain.com/wp-content/plugins//adopt_styles.css?ver=2.9.1\' type=\'text/css\' media=\'all\' /> 链接已断开-我的WordPress未提供URL。(双斜杠不是问题的根源)以前有人见