Editor-style.css dosyasını yeniden yüklemeye zorlama


11

editor-style.cssTinyMCE editörü için stil sayfasını manuel olarak değiştirdiğimde , yenilemeyi zorlamak için bir yöntem var mı ? Değişiklik hemen gösterilmez ancak yönetim arka ucunun yönetici tarafında önbelleğe alınır.

Örneğin şöyle:

editor-style.css?ver=3393201

Geliştirme amaçlarınız için ise neden yalnızca tarayıcıda zor bir yenileme yapmayın veya tarayıcı önbelleğini kapatmıyorsunuz?
sanchothefat

3
Aynı sorunu yaşadım ve sert bir yenileme her zaman işe yaramıyor. Önbellek oldukça inatçı gibi görünüyor.
Ray Gulick

Yanıtlar:


10

Bunun için bir kanca vardır: 'mce_css'. Bu çağrıldığı _WP_Editors::editor_settings()ve tüm yüklü stil virgül ilk ve tek parametre olarak ayrılmış olsun.

Artık çok kolay: Genel değişkeni kullanın $editor_styles(işte, temanızın ve üst temanın zaten kaydedilmiş düzenleyici stil sayfaları), dosyanın son değişiklik zamanını parametre olarak ekleyin ve dizeyi yeniden oluşturun.

Bir As eklenti :

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

WordPress 3.9'da bu eklenti artık görüntü düzenleme düğmelerini bozuyor gibi görünüyor. Nedenini anlamaya çalışma şansım olmadı.
mrwweb

2016 Güncellemesi : functions.phpWP 4.6.1 ile bu kodu olduğu gibi eklemek (ancak bir eklenti yerine dosyamda), mükemmel çalışıyor. Medya ekleme veya medyayı yerinde düzenleme ile ilgili herhangi bir sorun yok gibi görünüyor. Bu bir argüman ekleyemezsiniz Bu delice add_editor_cssile filemtimeBirlikte can şekilde wp_enqueue_styledosya adının ucundaki, hatta bir çöp dize ... ama bu tamamen çalışır.
indextwo

Bu kullanışlı eklenti için teşekkürler! WP 4.9.6 ile kullanıyorum. Şu anda bulduğum tek hata, eklentinin etkinleştirildiği zaman <!--more-->etiketin TinyMCE içinde görüntülenmediğidir. Bunu nasıl çözebilirim?
pa4080

Bu, varsayılan düzenleyici stillerinin yüklenmesini bozar.
xsonic

9

WordPress'in (4.7.2) geçerli sürümü için çalışmak için toscho'nun cevabını alamadım ve bunun nedeni TinyMCE init dizisinin bir cache_suffix olarak ayarlanmış olması gibi görünüyor 'wp-mce-' . $tinymce_version.

Bunun yerine, bunun yerine tiny_mce_before_init filtresinin üzerine yazabilirsiniz :

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

Tabii ki, bu neredeyse iyi değil filemtime(), ama en azından 4.7.2'de çalışıyor.

Not: Bu ayrıca önbellek bozucuyu diğer düzenleyici stillerine ekler (skin.min.css, content.min.css, dashicons.min.css ve wp-content.css gibi)


2
Aktif test ve geliştirmedeyseniz, her zaman farklı olacak bir 'sürüm' numarası eklerdim. Bunu başarmanın bir yolu, Unix Dönemi'nden (1 Ocak 1970 00:00:00 GMT) $mce_init['cache_suffix'] = "v=" . time(); veya daha da basit bir şeyden beri saniye kullanmaktır $mce_init['cache_suffix'] = "v=" . rand(100000000,999999999);
roberthuttinger

6

add_editor_styleYalnızca CSS dosyanızla aramak yerine, bir önbellek bozucu sorgu dizesi parametresi ekleyin:

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

Bu, şimdiye kadar her zaman kusursuz çalışan en kolay yöntemdir.
antikbd

1
Bu yaklaşımın basitliğini ve diğer ilgisiz stil sayfalarına sorgu dizesini eklememesi gerçeğini seviyorum. filemtime()Önbellek bozma güncellemelerini otomatikleştirmek için bunu birleştirdim :add_editor_style(get_stylesheet_directory_uri() . '/editor-style.css?v=' . filemtime(get_stylesheet_directory() . '/editor-style.css'));
Josh Harrison

Buradaki anahtar get_template_directory_uri(), bir önbellek bozucu eklerken söz konusu css dosya (lar) ı için mutlak yolu her zaman kullanmaktır ; aksi takdirde çalışmaz.
Zoli Szabó

3

Aynı sorunu yaşadım (2012, WP 3.4.2 !!). Bu hata devam ederken olası çözümler:

1) Firebug kullanıyorsanız, Net panelindeki [x] Tarayıcı Önbelleğini Devre Dışı Bırak yardımcı olur. Hatta çok garip bir sorun yaşadım, önbelleğe alınan editör tarzı kısa bir süre (css filtreli) Firebug net panelinde bir kez daha kaybolur. Kendimi kanıtlamak için ekran görüntüleri aldı.

2) Tam bir tarayıcı önbelleği temizlemeye yardımcı olur. Bundan sonra ne sebeple olursa olsun konu yeniden ortaya çıkmadı.

3) Son olarak, tercih ettiğim tavsiyem, ayrıca emin olmanız gerekiyorsa, örn. Evreleme veya canlı sunucudaki müşterileriniz artımlı iyileştirmelerinizi alır (rahatsız edici önbellek temizleme tavsiyesi olmadan):

Dosyayı yeniden konumlandırın ve saymaya devam edin:

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

Keskin ama güvenilir.


0

En son sürümlerde kabul edilen cevapla ilgili sorun, $editor_stylesdizinin yalnızca tema kullanılarak eklenen stil sayfalarını içerdiğini, bu nedenle dönen wordpress veya eklenti tarafından dönen dizeden eklenen stil sayfalarının geri kalanını kaldırdığını varsayalım .

Aşağıda, kodu değiştirdikten sonra bulduğum çözüm, onu function.php dosyanızda kullanabilirsiniz. Çözümüm iç içe döngü kullanır ve $editor_stylesdizide bulunan stil sayfalarını denetler ve son değiştirilen zamanı sorgu dizesine parametre olarak ekler ve dizideki değeri günceller.

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);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.