Wordpress - Forcing reload of editor-style.css
There is a hook for that: 'mce_css'
. It is called in _WP_Editors::editor_settings()
and you get all loaded stylesheets comma separated as the first and only parameter.
Now it is easy: Use the global variable $editor_styles
(here are your theme’s and parent theme’s editor stylesheets stored already), add the time of the file’s last modification as a parameter and rebuild the string.
As a 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 );
}
I couldn't get toscho's answer to work for the current version of WordPress (4.7.2), and that seems to be because the TinyMCE init array has a cache_suffix set to 'wp-mce-' . $tinymce_version
.
So instead, you can just overwrite that with the tiny_mce_before_init filter, like so:
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' );
Of course, this isn't nearly as good as filemtime()
, but at least this works in 4.7.2.
Note: This also adds the cache buster to other editor styles (like skin.min.css, content.min.css, dashicons.min.css, and wp-content.css)
Instead of just calling add_editor_style
with your CSS file, add a cache buster query string parameter:
add_action('admin_enqueue_scripts', function(){
if(is_admin()){
add_editor_style(get_template_directory_uri().'/assets/css/editor.css?1');
}
});