केवल विशिष्ट पृष्ठों पर कोड कैसे शामिल करें?


14

मैं प्लगइन्स और शॉर्टकोड के बारे में सीख रहा हूं। मैंने देखा कि जब मैं अपने प्लगइन को सक्रिय करता हूं तो इसका कोड मेरे सभी पृष्ठों पर लोड हो जाता है- यहां तक ​​कि ऐसे पृष्ठ भी जिनमें मेरा शोर्ट नहीं है। (मैं सामग्री बनाम व्यवस्थापक पृष्ठों का मतलब नहीं है)। कुछ सामग्री पृष्ठों पर, मैं एक विशेष शोर्ट का उपयोग करता हूं और अन्य सामग्री पृष्ठों पर, मैं नहीं करता हूं - लेकिन किसी भी स्थिति में, प्लगइन का कोड लोड होता है। मैं इसे कैसे बनाऊं ताकि प्लगइन केवल उन पृष्ठों पर शामिल हो जहां शोर्ट का उपयोग किया जाता है?

ज्यादा जानकारी:

मान लीजिए कि मुझे एक प्लगइन मिला है जो एक लाइटबॉक्स बनाता है। मैं प्लगइन को सक्रिय करता हूं। मेरे "कूल इमेजेज" पेज पर, मैं एक लाइटबॉक्स बनाने के लिए शोर्ट का उपयोग करता हूं। जब मैं अपने "अबाउट" पेज पर व्यू सोर्स की जांच करता हूं, जो लाइटबॉक्स शोर्ट का उपयोग नहीं करता है, तो मैं देखता हूं कि लाइटबॉक्स प्लगइन का कोड लोड हो चुका है। यदि मैं अपना प्लगइन लिखता हूं तो मेरे पृष्ठ तेजी से लोड होंगे ताकि इसका कोड केवल उन पृष्ठों पर लोड हो जाए जहां इसकी आवश्यकता है। क्या यह संभव है? अन्यथा, मेरे पास अनावश्यक रूप से पृष्ठों पर लोड किए गए बहुत सारे प्लगइन्स के लिए कोड होगा। कोई विचार?


1
क्या आप किसी चीज़ को जानने की कोशिश कर रहे हैं, या उन पृष्ठों पर एक PHP स्क्रिप्ट निष्पादित करने की कोशिश कर रहे हैं जिनमें शोर्ट है?
mor7ifer

+1 @ m0r7if3r - मैं यह भी समझना चाहूंगा कि .. दृष्टिकोण बहुत अलग होगा
krembo99

@ mrOr7if3r, संदेश के लिए धन्यवाद। उदाहरण के लिए, मान लें कि मुझे Google मानचित्र प्लगइन मिल गया है। क्या उस प्लगइन को हर पेज पर लोड किया जाना है - यानी वे पेज जो प्लगइन का उपयोग नहीं करते हैं? मान लें कि मेरे पास एक "अबाउट" पेज है, जिस पर Google मैप्स शोर्ट नहीं है। अगर मैं व्यू सोर्स को देखता हूं, तो देखता हूं कि उस पेज पर प्लगइन का कोड लोड था (हालांकि मैं उपयोग नहीं कर रहा हूं)। क्या प्लगइन्स के लिए कोड को हर एक पृष्ठ पर लोड करना है? धन्यवाद।
लक्ष्मीदि

अच्छा सवाल जो imho (नए) सर्वोत्तम अभ्यास की ओर जाता है, क्योंकि WP अब हमें किसी भी समय स्क्रिप्ट को सक्षम करने में सक्षम बनाता है।
राफेल

जवाबों:


9

WP v3.3 ने हमें एक पृष्ठ के मध्य में wp_enqueue_script चलाने की क्षमता दी। टिकट 9346

इससे आपके जेएस को बेहतर ग्रैन्युलैरिटी (शॉर्टकोड का उपयोग करते समय, कम से कम) के साथ शामिल करना बहुत आसान हो गया है। यहाँ, jquery को केवल तभी शामिल किया जाएगा जब हमारा शोर्टकोड निकाल दिया जाएगा।

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
यह है कि यह कैसे किया जाना चाहिए, imo।
राफेल

1
बहुत बढ़िया, मुझे महसूस नहीं हुआ कि अब एक पेज के बीच में wp_enqueue_script चलाना संभव है। जरूरत पड़ने पर केवल लिपियों / सीएसएस को लोड करने के लिए एक बहुत साफ तरीका!
रिक कर्रान

2

व्यवस्थापक UI चर के लिए जाँच करें

एक मेनू आइटम एक विशेष मामला है: टिप्पणियाँ, जैसा कि वे add_WHATEVER_(submenu)page()एपीआई का उपयोग करके पंजीकृत होते हैं ।

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

ये wp कोर में गैर-कंसिस्टेंट और हार्डकोड हैं। ध्यान दें कि सभी पृष्ठ सभी पर सेट नहीं हैं।

पृष्ठ-विशिष्ट व्यवस्थापक UI हुक में हुक

तो फिर वहाँ भी विशेष, पृष्ठ-विशिष्ट हुक, कि आप में देख सकते हैं ( admin-footer.phpऔर admin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

वास्तविक दुनिया में कुछ उदाहरण: पोस्ट स्क्रीन

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

फिर यह भी है $hook_suffixकि जब आप अपनी कार्रवाई शुरू कर रहे हैं, तो आप स्क्रिप्ट्स को एन्क्यूइंग करने के खिलाफ जांच कर सकते हैं:

do_action( 'admin_enqueue_scripts', $hook_suffix );

अपडेट करें

इस डेटा / जानकारी तक आसान (1-क्लिक) का उपयोग करने के लिए, हमने एक स्वतंत्र रूप से उपलब्ध, डेवलपर फ्रेंडली प्लगइन "WCM) करंट एडमिनिस्ट्रेटर इंफो" नाम से बनाया है , जो GitHub पर उपलब्ध है । निकट भविष्य में प्लगइन आधिकारिक wp.org रिपॉजिटरी में भी पाया जा सकता है

स्क्रीन शॉट्स

इस प्लगइन के साथ आपको जो मिलता है उसका पूर्वावलोकन देने के लिए:

स्क्रीन

हुक्स

वैश्विक


0

की कुछ लाइनों के साथ कर सकते हैं (शीर्ष लेख में)

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

जाँच करता है कि यदि वर्तमान लोड पृष्ठ या पोस्ट है, तो सामग्री को पकड़ता है और आपके शोर्ट को खोजता है। इसे खोजने पर, यह आपके फ़ंक्शन को निष्पादित करता है।


आपके संदेश के लिए धन्यवाद। मैंने आपके समाधान का उपयोग करने की कोशिश की, लेकिन, दुर्भाग्य से, मैं इसे काम नहीं कर पाया।
लक्ष्मीदि

हेडर में जोड़ा गया था?
नोएल टॉक

1
क्या आपने पहले ही देखा है get_shortcode_regex()?
kaiser

0

सबसे सरल तरीका सिर्फ शोर्ट के लिए जाँच करना है।

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
उसके get_shortcode_regex()लिए है।
केसर

0

@kaiser ने get_shortcode_regex()इस धागे में कई बार उल्लेख किया, मैंने सोचा कि मैं इसका उपयोग कैसे करना है, इस पर एक उदाहरण देता हूं। कोड get_shortcode_regex()वर्डप्रेस कोड रेफरेंस पेज से बहुत अधिक लिया गया है ।

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

-3

मुझे यह समाधान मिला :

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}

3
लेकिन आप समाधान सभी पृष्ठों से स्क्रिप्ट हटा देंगे
ममदुका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.