正在强制重新加载EDITOR-Style.css

时间:2011-11-09 作者:keatch

是否有方法强制刷新editor-style.css, 当我手动更改TinyMCE编辑器的样式表时?修改不会立即显示,但会缓存在管理后端的管理端。

例如:

editor-style.css?ver=3393201

4 个回复
最合适的回答,由SO网友:fuxia 整理而成

有一个钩子:\'mce_css\'. 它被调用_WP_Editors::editor_settings() 您将得到所有加载的样式表,它们以逗号分隔,作为第一个也是唯一一个参数。

现在很简单:使用全局变量$editor_styles (这里已经存储了您的主题和父主题的编辑器样式表),添加文件上次修改的时间作为参数,并重新生成字符串。

作为plugin:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Refresh Editor Stylesheets
 * Description: Enforces fresh editor stylesheets per version parameter.
 * Version:     2012.07.21
 * Author:      Fuxia
 * Plugin URI:  http://wordpress.stackexchange.com/q/33318/73
 * Author URI:  https://fuxia.me
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 */

    add_filter( \'mce_css\', \'t5_fresh_editor_style\' );

    /**
     * Adds a parameter of the last modified time to all editor stylesheets.
     *
     * @wp-hook mce_css
     * @param  string $css Comma separated stylesheet URIs
     * @return string
     */
    function t5_fresh_editor_style( $css )
    {
        global $editor_styles;

        if ( empty ( $css ) or empty ( $editor_styles ) )
        {
            return $css;
        }

        // Modified copy of _WP_Editors::editor_settings()
        $mce_css   = array();
        $style_uri = get_stylesheet_directory_uri();
        $style_dir = get_stylesheet_directory();

        if ( is_child_theme() )
        {
            $template_uri = get_template_directory_uri();
            $template_dir = get_template_directory();

            foreach ( $editor_styles as $key => $file )
            {
                if ( $file && file_exists( "$template_dir/$file" ) )
                {
                    $mce_css[] = add_query_arg(
                        \'version\',
                        filemtime( "$template_dir/$file" ),
                        "$template_uri/$file"
                    );
                }
            }
        }

        foreach ( $editor_styles as $file )
        {
            if ( $file && file_exists( "$style_dir/$file" ) )
            {
                $mce_css[] = add_query_arg(
                    \'version\',
                    filemtime( "$style_dir/$file" ),
                    "$style_uri/$file"
                );
            }
        }

        return implode( \',\', $mce_css );
    }

SO网友:icecold_3000

我无法让toscho的答案适用于WordPress的当前版本(4.7.2),这似乎是因为TinyMCE init数组具有cache_suffix 设置为\'wp-mce-\' . $tinymce_version.

所以,您可以使用tiny_mce_before_init 过滤器,如下所示:

function wpse33318_tiny_mce_before_init( $mce_init ) {

    $mce_init[\'cache_suffix\'] = \'v=123\';

    return $mce_init;    
}
add_filter( \'tiny_mce_before_init\', \'wpse33318_tiny_mce_before_init\' );
当然,这远不如filemtime(), 但至少在4.7.2中是这样的。

Note: 这还将缓存buster添加到其他编辑器样式中(如skin.min.css、content.min.css、dashicons.min.css和wp content.css)

SO网友:Frank Nocke

我也有同样的问题(2012年,WP 3.4.2!!)。此错误存在时可能的解决方案:

1) If you use firebug, [x]Disable Browser Cache in the Net panel helps. 我甚至遇到了一个非常奇怪的问题,缓存编辑器样式在Firebug网络面板上短暂出现(在css过滤后)一秒钟,然后又消失了。截图来证明自己。

(2)A full browser cache clear helps. 此后,无论出于何种原因,该问题没有再次出现。

3) 最后,我的建议是,如果您还必须确保,即您在临时服务器或live server上的客户端得到了增量改进(没有任何恼人的缓存清除建议):

Relocate the file and keep counting up:

// add_editor_style(\'editor-style-01.css\'); bump for every deployment
// add_editor_style(\'editor-style-02.css\');
add_editor_style(\'editor-style-03.css\');
老套,但可靠。

SO网友:Zorro Here

我认为最新版本的公认答案的问题是$editor_styles 数组只包含使用主题添加的样式表,因此它会从返回的字符串中删除核心wordpress或插件添加的其他样式表。

以下是我在调整代码后提出的解决方案,您可以在函数中使用它。php文件。我的解决方案使用嵌套循环并检查中存在的样式表$editor_styles 数组,并将上次修改的时间作为参数附加到查询字符串,并更新数组中的值。

add_filter(\'mce_css\', \'fresh_editor_style\');

function fresh_editor_style($mce_css_string){
    global $editor_styles;
    $mce_css_list = explode(\',\', $mce_css_string);

    foreach ($editor_styles as $filename){
        foreach($mce_css_list as $key => $fileurl){
            if(strstr($fileurl, \'/\' . $filename)){
                $filetime = filemtime(get_stylesheet_directory() . \'/\' . $filename);
                $mce_css_list[$key] =  add_query_arg(\'time\', $filetime, $fileurl);
            }
        }
    }

    return implode(\',\', $mce_css_list);
}

结束

相关推荐

如何仅在使用时加载Widget javascrip+css文件?

我希望将我的小部件使用的javascript和css样式保存在它们自己的文件中(而不是将它们添加到主题中)。但我似乎无法让wordpress在边栏上实际使用小部件时添加它们。我试过这个:在类声明中,我添加了2个函数class EssentielleRubriquesPosts extends WP_Widget { function addFrontendCss(){ wp_enqueue_style(\'erw-frontend-css\', ESSENTIELLE_R