Erzwingen des Neuladens von editor-style.css

Gibt es eine Methode, um die Aktualisierung von editor-style.css , wenn ich das Stylesheet für den TinyMCE-Editor manuell ändere? Änderungen werden nicht sofort angezeigt, aber sie werden in der Admin-Seite des Administrations-Backends zwischengespeichert.

Zum Beispiel so:

 editor-style.css?ver=3393201 

Solutions Collecting From Web of "Erzwingen des Neuladens von editor-style.css"

Dafür gibt es einen Haken: 'mce_css' . Es wird in _WP_Editors::editor_settings() und Sie erhalten alle geladenen Stylesheets kommagetrennt als erster und einziger Parameter.

Jetzt ist es einfach: Benutze die globale Variable $editor_styles (hier sind die Editor-Stylesheets deines Themes und des übergeordneten Themas bereits gespeichert), füge den Zeitpunkt der letzten Änderung der Datei als Parameter hinzu und erstelle den String neu.

Als ein Plugin :

 < ?php # -*- coding: utf-8 -*- /** * Plugin Name: T5 Fresh Editor Stylesheets * Description: Enforces fresh editor stylesheets per version parameter. * Version: 2012.07.21 * Author: Thomas Scholz * Plugin URI: http://wordpress.stackexchange.com/q/33318/73 * Author URI: http://toscho.de * 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 ); } 

Ich hatte das gleiche Problem (2012, WP 3.4.2 !!). Mögliche Lösungen während dieser Fehler ist:

1) Wenn Sie Firebug verwenden, hilft [x] Browser-Cache im Net-Panel deaktivieren. Ich hatte sogar ein sehr merkwürdiges Problem, dass der im Cache gespeicherte Editor-Stil kurzzeitig (in einem CSS-gefilterten) Firebug-Netz-Panel für einen Bruchteil einer Sekunde erscheint, dann wieder verschwindet. Nahm Screenshots, um mir selbst zu beweisen.

2) Ein vollständiger Browser Cache-Clear hilft. Aus welchem ​​Grund auch immer danach erschien das Problem nicht wieder.

3) Zuletzt, mein bevorzugter Rat, wenn Sie auch sicherstellen müssen, dass Ihre Kunden auf Staging oder Live-Server Ihre inkrementellen Verbesserungen erhalten (ohne lästige Cache-Clearance-Beratung):

Verschiebe die Datei und zähle weiter:

 // 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'); 

Hacky, aber zuverlässig.

Ich konnte die Antwort von toscho nicht auf die aktuelle Version von WordPress (4.7.2) anwenden, und das scheint zu sein, weil das TinyMCE-Init-Array cache_suffix auf 'wp-mce-' . $tinymce_version 'wp-mce-' . $tinymce_version .

Sie können das also einfach mit dem tiny_mce_before_init Filter überschreiben, 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' ); 

Natürlich ist das bei filemtime() nicht so gut wie filemtime() , aber zumindest funktioniert das in 4.7.2.

Hinweis: Dadurch wird der Cache-Buster auch anderen Editoren hinzugefügt (wie skin.min.css, content.min.css, dashicons.min.css und wp-content.css)

Das Problem mit der akzeptierten Antwort in den letzten Versionen nehme ich an: $editor_styles Array enthält nur Stylesheets, die mit theme hinzugefügt wurden, so dass es den Rest der Stylesheets $editor_styles , die von core wordpress oder plugins aus der zurückkommenden Zeichenkette hinzugefügt wurden.

Im Folgenden ist die Lösung, die ich nach der Optimierung des Codes gefunden habe, Sie können es in Ihrer functions.php-Datei verwenden. Meine Lösung verwendet eine Nested Loop und prüft auf Stylesheets, die im Array $editor_styles , und hängt die letzte modifizierte Zeit als Parameter an die Abfragezeichenfolge an und aktualisiert den Wert im Array.

 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); } 

Anstatt add_editor_style mit Ihrer CSS-Datei add_editor_style , fügen Sie einen add_editor_style hinzu:

 add_action('admin_enqueue_scripts', function(){ if(is_admin()){ add_editor_style(get_template_directory_uri().'/assets/css/editor.css?1'); } });