it-swarm.com.de

Erzwingen des Neuladens von editor-style.css

Gibt es eine Methode, um die Aktualisierung von editor-style.css zu erzwingen, wenn ich das Stylesheet für den TinyMCE-Editor manuell ändere? Änderungen werden nicht sofort angezeigt, aber sie werden im Administrations-Backend zwischengespeichert.

Zum Beispiel so:

editor-style.css?ver=3393201
11
keatch

Dafür gibt es einen Haken: 'mce_css'. Es wird in _WP_Editors::editor_settings() aufgerufen und Sie erhalten alle geladenen Stylesheets als ersten und einzigen Parameter durch Kommas getrennt.

Jetzt ist es ganz einfach: Verwenden Sie die globale Variable $editor_styles (hier sind die Editor-Stylesheets Ihres Themas und des übergeordneten Themas bereits gespeichert), fügen Sie den Zeitpunkt der letzten Änderung der Datei als Parameter hinzu und erstellen Sie die Zeichenfolge neu.

Als 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 );
    }
10
fuxia

Ich konnte nicht erreichen, dass toschos Antwort für die aktuelle Version von WordPress (4.7.2) funktioniert, und das scheint daran zu liegen, dass das TinyMCE-Init-Array ein cache_suffix hat, das auf 'wp-mce-' . $tinymce_version gesetzt ist.

Sie können dies also stattdessen einfach mit dem tiny_mce_before_init -Filter überschreiben:

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

Das ist natürlich nicht annähernd so gut wie filemtime(), aber zumindest funktioniert das in 4.7.2.

Hinweis: Damit wird der Cache-Buster auch anderen Editorstilen hinzugefügt (z. B. skin.min.css, content.min.css, dashicons.min.css und wp-content.css).

9
icecold_3000

Anstatt nur add_editor_style mit Ihrer CSS-Datei aufzurufen, fügen Sie einen Cache-Buster-Abfragezeichenfolgenparameter hinzu:

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

Ich hatte das gleiche Problem (2012, WP 3.4.2 !!). Mögliche Lösungen für diesen Fehler:

1) Wenn Sie Firebug verwenden, hilft [x] Browser-Cache im Net-Panel deaktivieren. Ich hatte sogar ein sehr seltsames Problem, dass der zwischengespeicherte Editor-Stil (in einem CSS-gefilterten) Firebug-Net-Panel für den Bruchteil einer Sekunde kurz angezeigt wird und dann wieder verschwindet. Nahm Screenshots, um es mir selbst zu beweisen.

2) Ein vollständiges Löschen des Browser-Cache hilft. Aus irgendeinem Grund ist das Problem danach nicht wieder aufgetreten.

3) Zuletzt mein bevorzugter Rat, wenn Sie auch sicherstellen müssen, d. H. Ihre Kunden auf dem Staging- oder Live-Server erhalten Ihre inkrementellen Verbesserungen (ohne lästige Hinweise zur Cache-Freigabe):

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.

3
Frank Nocke

Ich gehe davon aus, dass das Problem mit der akzeptierten Antwort in den neuesten Versionen darin besteht, dass das $editor_styles-Array nur Stylesheets enthält, die mit theme hinzugefügt wurden. Daher werden die restlichen Stylesheets, die von Core WordPress oder Plugins hinzugefügt wurden, aus der zurückgegebenen Zeichenfolge entfernt.

Das Folgende ist die Lösung, die ich nach der Optimierung des Codes gefunden habe. Sie können sie in Ihrer functions.php-Datei verwenden. Meine Lösung verwendet eine verschachtelte Schleife und sucht nach Stylesheets, die im $editor_styles-Array vorhanden sind, und hängt die zuletzt geänderte Zeit als Parameter an, um die Zeichenfolge abzufragen und den Wert im Array zu aktualisieren.

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);
}
0
Zorro Here