editor-style.css를 강제로 새로 고침 편집기의 스타일 시트를

editor-style.cssTinyMCE 편집기의 스타일 시트를 수동으로 변경할 때 강제로 새로 고침하는 방법이 있습니까? 수정 사항은 즉시 표시되지 않지만 관리 백엔드의 관리 측에 캐시됩니다.

예를 들면 다음과 같습니다.

editor-style.css?ver=3393201



답변

이에 대한 갈고리가 있습니다 : 'mce_css'. 호출 된 _WP_Editors::editor_settings()모든 스타일 시트를 쉼표로 구분하여 첫 번째 매개 변수로만 얻습니다.

전역 변수 $editor_styles(여기서 테마 및 상위 테마의 편집기 스타일 시트가 이미 저장되어 있음)를 사용하여 파일의 마지막 수정 시간을 매개 변수로 추가하고 문자열을 다시 빌드하십시오.

A와 플러그인 :

<?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 (4.7.2)에서 작동하는 toscho의 대답을 얻을 수 없었습니다. TinyMCE init 배열에 cache_suffix가로 설정되어 있기 때문 'wp-mce-' . $tinymce_version입니다.

대신에 tiny_mce_before_init 필터로 다음과 같이 덮어 쓸 수 있습니다 .

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

물론 이것은만큼 좋지는 filemtime()않지만 적어도 4.7.2에서 작동합니다.

참고 : 또한 다른 버스 스타일 (예 : skin.min.css, content.min.css, dashicons.min.css 및 wp-content.css)에 캐시 버스터를 추가합니다.


답변

add_editor_styleCSS 파일을 호출 하는 대신 캐시 버스터 쿼리 문자열 매개 변수를 추가하십시오.

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


답변

나는 같은 문제가 있었다 (2012, WP 3.4.2 !!). 이 버그가있는 동안 가능한 해결책 :

1) Firebug를 사용하는 경우 [x] Net 패널에서 브라우저 캐시 비활성화가 도움이됩니다.
캐시 된 편집기 스타일이 잠시 동안 (css-filtered) Firebug net 패널에 잠깐 동안 나타나서 다시 사라지는 매우 이상한 문제가있었습니다. 자신을 증명하기 위해 스크린 샷을 찍었습니다.

2) 전체 브라우저 캐시 지우기가 도움이됩니다. 그 이후 어떤 이유로 든 문제가 다시 나타나지 않았습니다.

3) 마지막으로, 스테이징 또는 라이브 서버상의 클라이언트가 점진적 개선을 얻는다면 (내가 성가신 캐시 정리 조언없이) 내 선호하는 조언 :

파일을 재배치하고 카운트 업을 계속하십시오.

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

해 키지 만 신뢰할 수 있습니다.


답변

내가 생각하는 최신 버전의 대답에 대한 문제는 $editor_styles배열에 테마를 사용하여 추가 된 스타일 시트 만 포함하기 때문에 핵심 워드 프레스 또는 플러그인에 의해 추가 된 나머지 스타일 시트를 반환 문자열에서 제거합니다.

다음은 코드를 조정 한 후 생각해 낸 해결책입니다. functions.php 파일에서 사용할 수 있습니다. 내 솔루션은 중첩 루프를 사용하고 $editor_styles배열 에있는 스타일 시트를 확인 하고 마지막 수정 시간을 매개 변수로 문자열을 쿼리에 추가하고 배열의 값을 업데이트합니다.

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


답변