Buộc tải lại trình soạn thảo-style.css


11

Có phương pháp nào để bắt buộc làm mới editor-style.css, khi tôi thay đổi thủ công biểu định kiểu cho trình soạn thảo TinyMCE không? Sửa đổi không hiển thị ngay lập tức nhưng chúng sẽ được lưu trong bộ nhớ quản trị của phần quản trị.

Ví dụ như thế này:

editor-style.css?ver=3393201

Nếu đó là cho mục đích phát triển của bạn, tại sao không làm mới cứng trong trình duyệt hoặc tắt bộ đệm của trình duyệt?
sanchothefat

3
Tôi đã có cùng một vấn đề, và làm mới khó không phải lúc nào cũng hoạt động. Bộ nhớ đệm có vẻ khá cứng đầu.
Ray Gulick

Câu trả lời:


10

Có một cái móc cho rằng : 'mce_css'. Nó được gọi trong _WP_Editors::editor_settings()và bạn nhận được tất cả các biểu định kiểu được tải được phân tách bằng dấu phẩy làm tham số đầu tiên và duy nhất.

Bây giờ thật dễ dàng: Sử dụng biến toàn cục $editor_styles(đây là các kiểu trình soạn thảo của chủ đề và chủ đề gốc đã được lưu trữ), thêm thời gian sửa đổi cuối cùng của tệp làm tham số và xây dựng lại chuỗi.

Là một 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 );
    }

Trong WordPress 3.9, plugin này dường như phá vỡ các nút chỉnh sửa hình ảnh. Tôi đã không có cơ hội để cố gắng tìm hiểu tại sao.
mrwweb

Cập nhật 2016 : Thêm mã này chính xác như hiện tại (nhưng trong functions.phptệp của tôi chứ không phải là plugin) với WP 4.6.1, nó hoạt động hoàn hảo. Dường như không có bất kỳ vấn đề nào với việc thêm phương tiện hoặc chỉnh sửa nội tuyến phương tiện. Thật điên rồ mà bạn không thể thêm một cuộc tranh cãi đến add_editor_cssvới filemtimecon đường bạn có thể với wp_enqueue_style, hoặc thậm chí một chuỗi rác trên sự kết thúc của tên tập tin ... nhưng điều này hoàn toàn hoạt động.
indextwo

Cảm ơn bạn cho plugin hữu ích này! Tôi đang sử dụng nó với WP 4.9.6. Lỗi duy nhất mà tôi tìm thấy vào lúc này là khi plugin được kích hoạt, <!--more-->thẻ không được hiển thị trong TinyMCE. Bất kỳ ý tưởng làm thế nào tôi có thể giải quyết điều này?
pa4080

Điều này phá vỡ việc tải các kiểu trình soạn thảo mặc định.
xsonic

9

Tôi không thể nhận được câu trả lời của toscho để hoạt động cho phiên bản WordPress hiện tại (4.7.2) và điều đó dường như là do mảng init TinyMCE có bộ đệm_s_six được đặt thành 'wp-mce-' . $tinymce_version.

Vì vậy, thay vào đó, bạn chỉ có thể ghi đè lên nó bằng bộ lọc tiny_mce_b Before_init , như vậy:

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

Tất nhiên, điều này gần như không tốt bằng filemtime(), nhưng ít nhất điều này hoạt động trong 4.7.2.

Lưu ý: Điều này cũng thêm bộ đệm bus vào các kiểu trình soạn thảo khác (như skin.min.css, content.min.css, dashicons.min.css và wp-content.css)


2
Nếu bạn đang trong quá trình thử nghiệm và phát triển, tôi sẽ thêm số 'phiên bản' sẽ luôn khác. Một cách để thực hiện điều này là sử dụng giây kể từ Unix Epoch (ngày 1 tháng 1 năm 1970 00:00:00 GMT) $mce_init['cache_suffix'] = "v=" . time(); hoặc một cái gì đó thậm chí đơn giản hơn như $mce_init['cache_suffix'] = "v=" . rand(100000000,999999999);
roberthuttinger

6

Thay vì chỉ gọi add_editor_stylebằng tệp CSS của bạn, hãy thêm tham số chuỗi truy vấn buster cache:

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

Đây là phương pháp dễ nhất cho đến nay hoạt động hoàn hảo mọi lúc.
antikbd

1
Tôi thích sự đơn giản của phương pháp này và thực tế là nó không thêm chuỗi truy vấn vào các biểu định kiểu không liên quan khác. Tôi đã kết hợp điều này với filemtime()để tự động hóa các bản cập nhật bộ nhớ cache:add_editor_style(get_stylesheet_directory_uri() . '/editor-style.css?v=' . filemtime(get_stylesheet_directory() . '/editor-style.css'));
Josh Harrison

Chìa khóa ở đây là luôn luôn sử dụng đường dẫn tuyệt đối cho (các) tệp css được đề cập (nghĩa là sử dụng get_template_directory_uri()), khi nối thêm bộ đệm bộ đệm; nếu không nó sẽ không hoạt động.
Zoli Szabó

3

Tôi đã có cùng một vấn đề (2012, WP 3.4.2 !!). Các giải pháp có thể trong khi lỗi này là xung quanh:

1) Nếu bạn sử dụng fireorms, [x] Tắt Cache của trình duyệt trong bảng điều khiển Net sẽ giúp. Tôi thậm chí đã có một vấn đề rất kỳ lạ, đó là kiểu trình soạn thảo được lưu trong bộ nhớ cache xuất hiện trong một thời gian ngắn (trong một bảng điều khiển mạng Firebird được lọc css trong một giây, hơn là biến mất một lần nữa. Chụp ảnh màn hình để chứng minh với bản thân mình.

2) Xóa bộ nhớ cache trình duyệt đầy đủ giúp. Vì lý do gì sau đó vấn đề không xuất hiện trở lại.

3) Cuối cùng, lời khuyên ưa thích của tôi, nếu bạn cũng phải đảm bảo, tức là khách hàng của bạn trên máy chủ hoặc máy chủ trực tiếp nhận được các cải tiến gia tăng của bạn (không có bất kỳ lời khuyên nào về giải phóng bộ đệm gây phiền nhiễu):

Định vị lại tệp và tiếp tục đếm lên:

// 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, nhưng đáng tin cậy.


0

Vấn đề với câu trả lời được chấp nhận trong các phiên bản mới nhất mà tôi giả sử là $editor_stylesmảng chỉ chứa các bảng định kiểu được thêm vào bằng cách sử dụng chủ đề, do đó, nó sẽ loại bỏ phần còn lại của các bảng định kiểu được thêm bởi lõi wordpress hoặc plugin từ chuỗi trả về.

Sau đây là giải pháp tôi đã đưa ra sau khi chỉnh sửa mã, bạn có thể sử dụng nó trong tệp tin.php. Giải pháp của tôi sử dụng vòng lặp lồng nhau và kiểm tra các bảng định kiểu có trong $editor_stylesmảng và nối thêm thời gian sửa đổi lần cuối dưới dạng tham số vào chuỗi truy vấn và cập nhật giá trị trong mảng.

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);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.