Forcer le rechargement de editor-style.css

10

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 la partie administrative du système d’administration.

Par exemple, comme ceci:

editor-style.css?ver=3393201
    
posée keatch 09.11.2011 - 16:26

5 réponses

11

Il existe 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 un virgule, en tant que premier et unique paramètre.

Maintenant, rien de plus simple: utilisez la variable globale $editor_styles (les feuilles de style de votre thème et de votre thème parent sont 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 plug-in :

<?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 );
    }
    
réponse donnée fuxia 21.07.2012 - 08:47
7

Je ne pouvais pas obtenir la réponse de toscho pour la version actuelle de WordPress (4.7.2), et cela semble être dû au fait que le tableau d'initialisation 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 dans la version 4.7.2.

Remarque: Cette opération 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)

    
réponse donnée icecold_3000 15.02.2017 - 02:51
4

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

1) Si vous utilisez Firebug, [x] Désactiver le cache du navigateur dans le panneau Internet aide. J'ai même eu un problème très étrange, que le style d'édition 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. J'ai pris des captures d'écran pour me prouver.

2) Il est utile de vider le cache complet du navigateur. Pour quelle que raison que ce soit, le problème ne s'est pas reproduit par la suite.

3) Enfin, mon conseil préféré, si vous devez également vous assurer que vos clients sur staging ou serveur en direct 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.

    
réponse donnée Frank Nocke 08.11.2012 - 12:35
2

Au lieu d'appeler 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');
  }
});
    
réponse donnée user67624 21.08.2017 - 06:46
0

Le problème avec la réponse acceptée dans les dernières versions, je suppose, est que $editor_styles array ne contient que des feuilles de style ajoutées à l'aide de thème. Par conséquent, il supprime le reste des feuilles de style ajoutées par wordpress principal ou par des 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 du 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);
}
    
réponse donnée Zorro Here 16.06.2017 - 20:16

Lire d'autres questions sur les étiquettes