web-dev-qa-db-fra.com

Forcer le rechargement de editor-style.css

Existe-t-il une méthode pour forcer l'actualisation de editor-style.css lorsque je modifie manuellement la feuille de style pour l'éditeur TinyMCE? Les modifications ne s'affichent pas immédiatement, mais elles seront mises en cache dans le côté administrateur du backend de l'administration.

Par exemple comme ceci:

editor-style.css?ver=3393201
11
keatch

Il y a un crochet pour cela: 'mce_css'. Il est appelé dans _WP_Editors::editor_settings() et vous obtenez toutes les feuilles de style chargées, séparées par des virgules, en tant que premier et unique paramètre.

Maintenant, c’est simple: utilisez la variable globale $editor_styles (ici, les feuilles de style de l’éditeur du thème parent déjà stockées), ajoutez l’heure de la dernière modification du fichier en tant que paramètre et reconstruisez la chaîne.

En tant que 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

La réponse de toscho ne fonctionnait pas avec la version actuelle de WordPress (4.7.2), et cela semble être dû au fait que le tableau d'initialisation de TinyMCE a un cache_suffix défini sur 'wp-mce-' . $tinymce_version.

Au lieu de cela, vous pouvez simplement écraser cela avec le filtre tiny_mce_before_init , comme suit:

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

Bien sûr, ce n'est pas aussi bon que filemtime(), mais au moins, cela fonctionne en 4.7.2.

Remarque: Ceci ajoute également le filtre de cache à d'autres styles d'éditeur (tels que skin.min.css, content.min.css, dashicons.min.css et wp-content.css).

9
icecold_3000

Au lieu d'appeler simplement add_editor_style avec votre fichier CSS, ajoutez un paramètre de chaîne de requête de bus de cache:

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

J'ai eu le même problème (2012, WP 3.4.2 !!). Solutions possibles alors que ce bogue est présent:

1) Si vous utilisez firebug, [x] Désactiver le cache du navigateur dans le panneau Internet est utile. J'ai même eu un problème très étrange, que le style de l'éditeur en cache apparaisse brièvement (dans un panneau réseau filtré par css) Firebug net pendant une fraction de seconde, puis qu'il disparaisse à nouveau. A pris des captures d'écran pour me prouver.

2) Un cache de navigateur complet clair aide. Pour une raison quelconque par la suite, le problème ne réapparut pas.

3) Enfin, mon conseil préféré, si vous devez également vous assurer, par exemple, que vos clients sur le serveur intermédiaire ou actif obtiennent vos améliorations incrémentielles (sans aucun conseil gênant pour la suppression de la mémoire cache):

Déplacez le fichier et continuez à compter:

// 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, mais fiable.

3
Frank Nocke

Le problème avec la réponse acceptée dans les dernières versions, je suppose, est que le tableau $editor_styles ne contient que des feuilles de style ajoutées à l'aide de thème, de sorte qu'il supprime le reste des feuilles de style ajoutées par wordpress ou par plugins dans la chaîne renvoyée.

Voici la solution que j'ai trouvée après avoir peaufiné le code, vous pouvez l'utiliser dans votre fichier functions.php. Ma solution utilise une boucle imbriquée et recherche les feuilles de style présentes dans le tableau $editor_styles. Elle ajoute l'heure de la dernière modification en tant que paramètre de la chaîne de requête et met à jour la valeur dans le tableau.

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