जाँच करें कि क्या गुटेनबर्ग वर्तमान में उपयोग में है


13

मैं कैसे जांच सकता हूं कि वर्तमान में उपयोग किए जा रहे संपादक एक WordPress प्लगइन में गुटेनबर्ग है?

मुझे इसकी आवश्यकता है क्योंकि गुटेनबर्ग का अभाव है post_submitbox_misc_actions, इसलिए मुझे एक गिरावट की आवश्यकता है जो केवल उपयोग किया जाएगा यदि वर्तमान संपादक गुटेनबर्ग है।


क्या आपका मतलब फ़ंक्शन_exists (अप्रयुक्त) के साथ is_gutenberg_page () है?
बीरगायर

जवाबों:


10

is_gutenberg_page()जब आप गुटेनबर्ग को सक्रिय करते हैं, तो यह कार्य होता है, इसलिए आप जाँच सकते हैं:

if( function_exists( 'is_gutenberg_page' ) )

यह केवल तभी जाँच करेगा जब गुटेनबर्ग सक्रिय है, और फ़ंक्शन स्वयं जाँच करेगा कि वर्तमान संपादक गुटेनबर्ग को लोड करने के लिए सेट है या नहीं। तो कोड बन जाता है:

if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )

बेशक, इसे व्यवस्थापक पैनल के पृष्ठों से जांचना होगा और जब आंतरिक डेटा फ़ंक्शन को कॉल करने के लिए तैयार होगा। तो आपको एक उपयुक्त हुक का उपयोग करके चेक करना होगा । उदाहरण के लिए, यदि आप initहुक का उपयोग करके इसकी जांच करते हैं, तो यह काम नहीं करेगा

गुटेनबर्ग स्वयं is_gutenberg_page()फ़ंक्शन से gutenberg_init()फ़ंक्शन की जांच करता है , जो replace_editorहुक का उपयोग करके लोड किया जाता है । इसलिए replace_editorहुक इस जाँच को करने के लिए एक अच्छी जगह है।

हालाँकि, मैं admin_enqueue_scriptsचेक बनाने के लिए उपयोग करने का सुझाव दूंगा, क्योंकि:

  1. admin_enqueue_scriptsवह पहला हुक है जिसे एक ही is_gutenberg_page()चेक के बाद निकाल दिया जाता है गुटेनबर्ग खुद बनाता है।

  2. गुटेनबर्ग की प्रकृति के कारण, आप अपने उद्देश्य के लिए बाहरी स्क्रिप्ट / शैलियों को लोड करने की अधिक संभावना रखते हैं।

  3. admin_enqueue_scriptsएक प्रसिद्ध हुक है और यह केवल व्यवस्थापक पैनल पृष्ठों से निकाल दिया गया है। इसलिए फ्रंट एंड इससे प्रभावित नहीं होता है।

नमूना कोड (परीक्षण):

add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_test' );
function wpse_gutenberg_editor_test() {
    if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { 
        // your gutenberg editor related CODE here
    }   
    else {
        // this is not gutenberg.
        // this may not even be any editor, you need to check the screen.
    }   
}

2
यह केवल गुटेनबर्ग प्लगइन के साथ काम कर रहा है, यह wp5 में काम नहीं करता है यदि प्लगइन स्थापित नहीं है
मैक्सिमम स्कोनी

1
is_block_editorwp5.0 + के लिए आवश्यक है
जैकब राचुआ

5

फ़ंक्शन is_gutenberg_pageगुटेनबर्ग प्लगइन से है, जबकि is_block_editorविधि 5.0 से उपलब्ध है। नीचे यह फ़ंक्शन एक एकल चेकिंग फ़ंक्शन में दोनों को जोड़ता है।

नीचे दिया गया कोड Freemius SDK है , जो उनकी टीम के लिए है:

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // The Gutenberg plugin is on.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Gutenberg page on 5+.
        return true;
    }
    return false;
}

यह आगे बढ़ने का सही उत्तर है।
जैकब रचुआ

4
  1. गुटेनबर्ग को वर्डप्रेस 5.0 में एकीकृत किया गया है और अब आप use_block_editor_for_postफ़ंक्शन का उपयोग करके जांच कर सकते हैं ।

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. वैकल्पिक रूप से, नई पोस्ट बनाते समय आप यह use_block_editor_for_post_typeजांचने के लिए फ़ंक्शन का उपयोग कर सकते हैं कि क्या इस पोस्ट प्रकार के लिए गुटेनबर्ग सक्रिय है।

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg is active.
    }

2

has_blocks सामग्री की जांच करने के लिए जाने का तरीका है, लेकिन यह भी ध्यान दें कि क्या आप सिर्फ चेक कर रहे हैं कि क्या ब्लॉक एडिटर स्क्रीन का उपयोग व्यवस्थापक क्षेत्र में किया जा रहा है, तो आप इस तरह से एक चेक कर सकते हैं (नए ब्लॉक संपादक और गुटेनबर्ग प्लगइन दोनों के लिए खाते में) :

if (is_admin()) {
    global $current_screen;
    if (!isset($current_screen)) {$current_screen = get_current_screen();}
    if ( ( method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor() )
      || ( function_exists('is_gutenberg_page')) && is_gutenberg_page() ) ) {
        // DO SOMETHING HERE
    }
}

यह बहुत अच्छा है, लेकिन मुझे नहीं लगता कि आपको कॉल करने की आवश्यकता है global $current_screen
साइमन कोसर

सच है, मैं इस तरह से उदाहरणों को कोड करता हूं क्योंकि मुझे नहीं पता कि वे किस संदर्भ में होंगे - वे इस आधार पर आसानी से टूट सकते हैं ... मैंने सिर्फ इस उद्देश्य के लिए एक अतिरिक्त is_admin और isset चेक जोड़ा है।
मैजिक

वर्तमान WP संस्करण (5.0.2) में उपरोक्त स्निपेट तब काम नहीं करता है जब इसे current_screenहुक से जुड़े फ़ंक्शन में निष्पादित किया is_block_editorजाता है क्योंकि बाद में उस से सेट किया जाता है। यह केवल तभी काम करता है जब इसे बाद के समय में निष्पादित किया जाता है (यानी load-(page))। यह WP में एक बग लगता है।
मार्कोच्ची

1

गुटेनबर्ग 3.6 ने जैसे कार्य पेश किए has_blocksऔर has_block। वे हटाए गए gutenberg_post_has_blocksफ़ंक्शन को प्रतिस्थापित करते हैं।

यदि has_blocksपोस्ट संपादित करते समय गुटेनबर्ग की तुलना में सही रिटर्न का उपयोग किया गया था।

आप या तो has_blocks()बिना परमर्स का उपयोग कर सकते हैं यदि $postवैश्विक पहले से ही (क्वेरी लूप जैसी किसी चीज़ के लिए) सेट है या पोस्ट सामग्री को सीधे देखेंhas_blocks( $content )


0

WP 5.0 और उच्चतर में, एक फ़ंक्शन 'has_blocks' /wp-includes/blocks.php में मौजूद है, इसलिए आप इसका उपयोग कर सकते हैं:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.