संपादक-style.css को फिर से लोड करने के लिए मजबूर करना


11

क्या रिफ्रेश को बाध्य करने की कोई विधि है editor-style.css, जब मैं TinyMCE संपादक के लिए मैन्युअल रूप से स्टाइलशीट बदलूं? संशोधन तुरंत दिखाई नहीं देता है, लेकिन वे प्रशासन बैकएंड के व्यवस्थापक पक्ष में कैश किए जाएंगे।

इस तरह के उदाहरण के लिए:

editor-style.css?ver=3393201

यदि यह आपके विकास के उद्देश्यों के लिए है तो क्यों न केवल ब्राउज़र में हार्ड रिफ्रेश करें या ब्राउज़र कैश को बंद करें?
sanchothefat

3
मैं एक ही समस्या है, और एक कठिन ताज़ा हमेशा काम नहीं करता है। कैशिंग बहुत जिद्दी लग रहा है।
1835 में रे गुलिक

जवाबों:


10

उसके लिए एक हुक है 'mce_css':। इसे अंदर बुलाया जाता है _WP_Editors::editor_settings()और आपको पहले और एकमात्र पैरामीटर के रूप में सभी लोड किए गए स्टाइलशीट कॉमा अलग हो जाते हैं।

अब यह आसान है: वैश्विक चर का उपयोग करें $editor_styles(यहां आपके विषय और माता-पिता की विषय-वस्तु संपादक शैली पहले से संग्रहीत हैं), फ़ाइल के अंतिम संशोधन के समय को एक पैरामीटर के रूप में जोड़ें और स्ट्रिंग का पुनर्निर्माण करें।

एक प्लगइन के रूप में :

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

वर्डप्रेस 3.9 में यह प्लगइन अब छवि संपादन बटन को तोड़ने लगता है। मुझे यह पता लगाने का प्रयास करने का मौका क्यों नहीं मिला।
mrwweb

2016 अपडेट : functions.phpWP 4.6.1 के साथ इस कोड को बिल्कुल-जैसे ( बल्कि एक प्लगइन के बजाय मेरी फ़ाइल में ) जोड़ना , यह पूरी तरह से काम करता है। मीडिया को जोड़ने या मीडिया इनलाइन को संपादित करने में कोई समस्या नहीं लगती है। ऐसा नहीं है कि आप नहीं करने के लिए एक तर्क जोड़ सकते हैं पागल है add_editor_cssके साथ filemtimeजिस तरह से आप के साथ कर सकते हैं wp_enqueue_styleफ़ाइल नाम के अंत पर, या यहां तक कि एक कचरा स्ट्रिंग ... लेकिन यह पूरी तरह से काम करता है।
indextwo

इस उपयोगी प्लगइन के लिए धन्यवाद! मैं इसे WP 4.9.6 के साथ उपयोग कर रहा हूं। एकमात्र बग जो मुझे इस समय मिला, जब प्लगइन सक्रिय हो जाता है <!--more-->टैग TinyMCE के भीतर प्रदर्शित नहीं होता है। किसी भी विचार मैं यह कैसे हल कर सकते हैं?
पा ४० 30०

यह डिफ़ॉल्ट संपादक शैलियों के लोडिंग को तोड़ता है।
xsonic

9

मुझे वर्डप्रेस (4.7.2) के वर्तमान संस्करण के लिए काम करने के लिए सांचा का उत्तर नहीं मिल सका, और ऐसा इसलिए लगता है क्योंकि टिनीएमसीई इनिट सरणी में कैशे_सुफीक्स सेट है 'wp-mce-' . $tinymce_version

इसलिए इसके बजाय, आप इसे छोटे_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) से भी जोड़ता है


2
यदि आप सक्रिय परीक्षण और विकास में हैं, तो मैं एक 'संस्करण' संख्या जोड़ूंगा जो हमेशा अलग होगा। इसे पूरा करने का एक तरीका यूनिक्स एपोच (1 जनवरी 1970 00:00:00 GMT) के बाद से सेकंड का उपयोग कर रहा है $mce_init['cache_suffix'] = "v=" . time(); या कुछ और भी सरल है $mce_init['cache_suffix'] = "v=" . rand(100000000,999999999);
roberthuttinger

6

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

यह अब तक की सबसे आसान विधि है जो हर बार निर्दोष रूप से काम करती है।
एंटीकबड

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 फ़ाइल (एस) के लिए निरपेक्ष पथ का उपयोग करने के लिए है , जब कैश बस्टर को जोड़ा जाता है; अन्यथा यह काम नहीं करेगा।
Zoli Szabó

3

मेरे पास एक ही मुद्दा था (2012, WP 3.4.2 !!)। इस बग के आसपास होने पर संभावित समाधान:

1) यदि आप फायरबग का उपयोग करते हैं, तो [x] नेट पैनल में ब्राउज़र कैश अक्षम करें मदद करता है। मैं भी एक बहुत ही अजीब मुद्दा था, कि कैश्ड संपादक शैली संक्षेप में प्रकट होती है (एक सीएसएस-फ़िल्टर्ड में) एक विभाजन दूसरे के लिए फायरबग नेट पैनल, फिर से गायब हो जाता है। खुद को साबित करने के लिए स्क्रीनशॉट ले लिया।

2) एक पूर्ण ब्राउज़र कैश स्पष्ट मदद करता है। इसके बाद जो भी कारण था वह मुद्दा फिर से सामने नहीं आया।

3) अंत में, मेरी पसंदीदा सलाह, अगर आपको भी सुनिश्चित करना है, अर्थात स्टेजिंग या लाइव सर्वर पर आपके क्लाइंट को आपके वृद्धिशील सुधार (w / o किसी भी कष्टप्रद कैश निकासी सलाह) प्राप्त होते हैं:

फ़ाइल स्थानांतरित करें और गिनती जारी रखें:

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

हैकी, लेकिन विश्वसनीय।


0

नवीनतम संस्करणों में स्वीकृत उत्तर के साथ समस्या मैं मानती हूं कि $editor_stylesइसमें केवल थीम का उपयोग करके जोड़ा गया स्टाइलशीट्स शामिल हैं, इसलिए परिणामस्वरूप यह रिटर्न स्ट्रिंग से कोर वर्डप्रेस या प्लगइन्स द्वारा जोड़े गए स्टाइलशीट्स के बाकी हिस्सों को स्ट्रिप्स करता है।

बाद में कोड को ट्विक करने के बाद मैं इसका समाधान कर रहा हूं, आप इसे अपने कार्यों में उपयोग कर सकते हैं। फाइल। मेरा समाधान $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);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.