editor-style.css
TinyMCE 편집기의 스타일 시트를 수동으로 변경할 때 강제로 새로 고침하는 방법이 있습니까? 수정 사항은 즉시 표시되지 않지만 관리 백엔드의 관리 측에 캐시됩니다.
예를 들면 다음과 같습니다.
editor-style.css?ver=3393201
editor-style.css
TinyMCE 편집기의 스타일 시트를 수동으로 변경할 때 강제로 새로 고침하는 방법이 있습니까? 수정 사항은 즉시 표시되지 않지만 관리 백엔드의 관리 측에 캐시됩니다.
예를 들면 다음과 같습니다.
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 );
}
functions.php
WP 4.6.1을 사용 하여이 코드를 그대로 ( 플러그인이 아닌 파일에) 추가하면 완벽하게 작동합니다. 미디어를 추가하거나 인라인으로 미디어를 편집하는 데 문제가없는 것 같습니다. 그것은 당신이 인수를 추가 할 수 미친 add_editor_css
와 함께 filemtime
당신이 할 수있는 방법 wp_enqueue_style
파일 이름의 끝에, 심지어 쓰레기 문자열 ... 그러나 이것은 완전히 작동합니다.
<!--more-->
TinyMCE 내에 태그가 표시되지 않는다는 것입니다. 어떤 아이디어를 어떻게 해결할 수 있습니까?
현재 버전의 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)에 캐시 버스터를 추가합니다.
$mce_init['cache_suffix'] = "v=" . time();
것입니다. $mce_init['cache_suffix'] = "v=" . rand(100000000,999999999);
add_editor_style
CSS 파일을 호출 하는 대신 캐시 버스터 쿼리 문자열 매개 변수를 추가하십시오.
add_action('admin_enqueue_scripts', function(){
if(is_admin()){
add_editor_style(get_template_directory_uri().'/assets/css/editor.css?1');
}
});
filemtime()
캐시 캐시 업데이트를 자동화하기 위해 이것을 결합했습니다 :add_editor_style(get_stylesheet_directory_uri() . '/editor-style.css?v=' . filemtime(get_stylesheet_directory() . '/editor-style.css'));
get_template_directory_uri()
은 캐시 버스터를 추가 할 때 항상 해당 CSS 파일의 절대 경로를 사용하는 것입니다 (예 :). 그렇지 않으면 작동하지 않습니다.
나는 같은 문제가 있었다 (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);
}