प्लगइन javascripts में defer = "defer" टैग कैसे जोड़े?


29

मैं प्लगइन javascripts में defer टैग नहीं जोड़ सका। Google डेवलपर पेजस्पीड टेस्ट मुझे संपर्क फ़ॉर्म 7 जावास्क्रिप्ट में defer टैग जोड़ने का सुझाव देता है ।

यह कैसे संपर्क प्रपत्र 7 हेडर में जावास्क्रिप्ट शामिल है।

add_action( 'wp_enqueue_scripts', 'wpcf7_enqueue_scripts' );

function wpcf7_enqueue_scripts() {
    // jquery.form.js originally bundled with WordPress is out of date and deprecated
    // so we need to deregister it and re-register the latest one
    wp_deregister_script( 'jquery-form' );
    wp_register_script( 'jquery-form', wpcf7_plugin_url( 'jquery.form.js' ),
        array( 'jquery' ), '2.52', true );

    $in_footer = true;
    if ( 'header' === WPCF7_LOAD_JS )
        $in_footer = false;

    wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'scripts.js' ),
        array( 'jquery', 'jquery-form' ), WPCF7_VERSION, $in_footer );

    do_action( 'wpcf7_enqueue_scripts' );
}

अब उपरोक्त कोड में defer = "defer" टैग कैसे जोड़ें ?


2
प्रासंगिक टिकट: core.trac.wordpress.org/ticket/12009
scribu

1
अच्छा सवाल @Viruthagiri।
रामकुमार एम

जवाबों:


57

वर्डप्रेस 4.1 के रूप में एक फिल्टर है script_loader_tag:। आप इसका उपयोग सही स्क्रिप्ट खोजने के लिए कर सकते हैं:

add_filter( 'script_loader_tag', function ( $tag, $handle ) {

    if ( 'contact-form-7' !== $handle )
        return $tag;

    return str_replace( ' src', ' defer="defer" src', $tag );
}, 10, 2 );

पुराना उत्तर

कोई समर्पित फ़िल्टर उपलब्ध नहीं है ... कम से कम मैं एक नहीं देख सकता। परंतु …

  • wp_print_scripts() कॉल WP_Scripts->do_items()
  • जो कहता है WP_Scripts->do_item()
  • जो उपयोग करता है esc_url()
  • जो एक फिल्टर प्रदान करता है'clean_url' :।

और अब हम चले:

function add_defer_to_cf7( $url )
{
    if ( FALSE === strpos( $url, 'contact-form-7' )
      or FALSE === strpos( $url, '.js' )
    )
    { // not our file
        return $url;
    }
    // Must be a ', not "!
    return "$url' defer='defer";
}
add_filter( 'clean_url', 'add_defer_to_cf7', 11, 1 );

कैविएट: परीक्षण नहीं, सिर्फ एक विचार। :)

अद्यतन करें

मैंने इस कोड के साथ एक प्लगइन लिखा और परीक्षण किया है। Https://gist.github.com/1584783 देखें


यह आवश्यकता के अनुसार डेटा-मेन के साथ उपयोग करने के लिए भी सही है
निकोला पेलुचेती

यह एक अच्छा हैक है, और इतना आसान है। मुझे लगता है कि जब यह आवश्यक हो तो charset = 'utf-8' जोड़ने के लिए भी अच्छा होगा!
वेबवार्ता

महान, लेकिन क्यों: 'होना चाहिए, नहीं "?
henrywright

@henrywright वर्डप्रेस 'लौटे हुए स्ट्रिंग के दोनों ओर जोड़ देता है , "जिसके परिणामस्वरूप अमान्य HTML हो जाएगा।
FUXIA

2
संभवतया एक अच्छा विचार यह है कि कोई व्यक्ति इसे अन्य लिपियों के साथ काम करने के लिए चालू करना चाहता है, यह सुनिश्चित करने के लिए होगा कि इसे केवल फॉन्ट-एंड पर उपयोग करने के लिए मान्य किया जाए, शायद if( ! is_admin() ){}ACF जैसे लोकप्रिय प्लगइन्स का उपयोग करने से आपको सिरदर्द हो सकता है।
crissoca
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.