अद्यतन jquery संस्करण


24

मैं वर्डप्रेस संस्करण 4.7.2 चलाता हूं। और यह jQuery संस्करण 1.12 का उपयोग करता है। मुझे इस संस्करण को उच्चतर में अपडेट करना होगा। मैंने इसे पहले एक नए संस्करण के साथ बदल दिया था, लेकिन जब मैंने वर्डप्रेस कोर को अपग्रेड किया तो इसे फिर से 1.12 से बदल दिया गया। मैं jQuery के संस्करण को कैसे बदल सकता हूं जो वर्डप्रेस स्थायी रूप से उपयोग करता है?

जवाबों:


29

चेतावनी: आपको कोर jQuery संस्करण को प्रतिस्थापित नहीं करना चाहिए, विशेष रूप से व्यवस्थापक पैनल में । चूंकि कई वर्डप्रेस कोर कार्यक्षमता संस्करण पर निर्भर हो सकती है। इसके अलावा, अन्य प्लगइनjQueryकोर में जोड़ेगएसंस्करणपर निर्भर हो सकते हैं।

यदि आप सुनिश्चित हैं कि आप मुख्य jQueryसंस्करण को बदलना चाहते हैं , तो उस स्थिति में आप अपनी सक्रिय थीम की functions.phpफ़ाइल में निम्नलिखित CODE जोड़ सकते हैं (भले ही आप इसके लिए एक प्लगइन बनाएँ):

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery' );
    // Change the URL if you want to load a local copy of jQuery from your own server.
    wp_register_script( 'jquery', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
}
add_action( 'wp_enqueue_scripts', 'replace_core_jquery_version' );

यह कोर jQueryवर्जन को रिप्लेस करेगा और इसके बजाय 3.1.1गूगल के सर्वर से वर्जन को लोड करेगा ।

हालाँकि, अनुशंसित नहीं है , आप jQuery संस्करण को बदलने के लिए CODE की निम्न अतिरिक्त पंक्ति का भी उपयोग कर सकते हैं wp-admin:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

इस तरह, वर्डप्रेस को अपडेट करने के बाद भी आपके पास jQueryवैसा ही संस्करण होगा जैसा आप चाहते हैं।

थोड़ा बेहतर कार्य:

replace_core_jquery_versionसमारोह के ऊपर भी निकाल देता है jquery-migrateवर्डप्रेस कोर द्वारा जोड़ा स्क्रिप्ट। यह उचित है, क्योंकि jQuery का नवीनतम संस्करण पुराने संस्करण के साथ ठीक से काम नहीं करेगा jquery-migrate। हालाँकि, आप एक नया संस्करण भी शामिल कर सकते हैं jquery-migrate। उस स्थिति में, इसके बजाय निम्न फ़ंक्शन का उपयोग करें:

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery-core' );
    wp_register_script( 'jquery-core', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
    wp_deregister_script( 'jquery-migrate' );
    wp_register_script( 'jquery-migrate', "https://code.jquery.com/jquery-migrate-3.0.0.min.js", array(), '3.0.0' );
}

यदि आप पाते हैं कि यह आपके विषय को तोड़ता है, तो क्या आप केवल फ़ंक्शन से क्रिया हटा सकते हैं। क्या यह वापस मूल jQuery संस्करण में वापस आ जाएगा या यह एक स्थायी परिवर्तन है?
निक

1
यदि wp_enqueue_scriptsक्रिया का कॉलबैक फ़ंक्शन केवल jQuery को अपडेट करता है और jQuery को कहीं और से एंक्वाइन किया जा रहा है, तो कार्रवाई को हटाने से मूल jQuery को पुनर्स्थापित किया जाएगा। हालाँकि, कभी-कभी ब्राउज़र कैश कैश को ब्राउज़ करते हैं, सर्वर कैश सेटिंग्स पर निर्भर करता है, इसलिए, परिवर्तन देखने के लिए आपको ऐसा करने के बाद ब्राउज़र कैश साफ़ करना होगा।
फयाज

ठीक है धन्यवाद मैं सिर्फ यह सुनिश्चित करना चाहता था कि मैं इस कार्रवाई को जोड़ने से पहले अपनी साइट को खराब न करूं। मुझे लग रहा था कि आपने जो कहा वह सटीक है लेकिन मैं इसे सुरक्षित खेलना चाहता था।
निक

1
यह स्पष्ट रूप से स्थायी नहीं है , क्योंकि यह परिवर्तन CODE पर ही निर्भर करता है, डेटाबेस पर कुछ भी सहेजा नहीं गया है। इसलिए संबंधित CODE को हटाने से पुरानी स्थिति वापस आ जाएगी।
फयाज

3.x संस्करणों की माइग्रेट स्क्रिप्ट तब काम नहीं करती है जब प्लगइन्स / थीम 1.12 से नीचे के संस्करण की उम्मीद करते हैं। इसके बारे में यहाँ और अधिक: wordpress.stackexchange.com/a/244543/75495
cjbj

5

मैंने इस विशिष्ट समस्या के लिए एक प्लगइन विकसित किया है। प्लगइन WordPress jQuery के साथ गड़बड़ नहीं करता है क्योंकि यह केवल फ्रंट-एंड में लोड होता है। देखें: वर्डप्रेस के लिए jQuery प्रबंधक

क्यों अभी तक एक और jQuery के अपडेटर / प्रबंधक / डेवलपर / डिबगिंग उपकरण?

क्योंकि कोई भी डेवलपर टूल आपको jQuery और / या jQuery माइग्रेट के एक विशिष्ट संस्करण का चयन करने की अनुमति नहीं देता है। उत्पादन और कीमा बनाया हुआ संस्करण दोनों प्रदान करना। नीचे देखें सुविधाएँ!

✅ केवल फ्रंट-एंड में निष्पादित, वर्डप्रेस व्यवस्थापक / बैकएंड और WP कस्टमाइज़र (संगतता कारणों के लिए) के साथ हस्तक्षेप नहीं करता है देखें: https://core.trac.wordpress.org/ticket/45130 और https: // core। trac.wordpress.org/ticket/37110

Query jQuery और / या jQuery के माइग्रेट को चालू / बंद करें

Ate jQuery और / या jQuery के माइग्रेट के एक विशिष्ट संस्करण को सक्रिय करें

और भी बहुत कुछ! कोड खुला स्रोत है, इसलिए आप इसका अध्ययन कर सकते हैं, इससे सीख सकते हैं और योगदान कर सकते हैं।


लगभग हर कोई गलत हैंडल का उपयोग करता है

वर्डप्रेस वास्तव में jquery- कोर हैंडल का उपयोग करता है, jquery का नहीं:

https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226

// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );

JQuery संभाल लोड करने के लिए सिर्फ एक उपनाम है jQuery कोर के साथ jQuery-विस्थापित

उपनाम के बारे में अधिक जानकारी देखें: wp_register_script एकाधिक पहचानकर्ताओं?

इसे करने का सही तरीका

नीचे मेरे उदाहरण में मैं https://code.jquery.com पर आधिकारिक jQuery CDN का उपयोग करता हूं। मैं script_loader_tag का भी उपयोग करता हूं ताकि मैं कुछ CDN विशेषताओं को जोड़ सकूं
आप निम्नलिखित कोड का उपयोग कर सकते हैं:

// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
    $wp_admin = is_admin();
    $wp_customizer = is_customize_preview();

    // jQuery
    if ( $wp_admin || $wp_customizer ) {
        // echo 'We are in the WP Admin or in the WP Customizer';
        return;
    }
    else {
        // Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
        // Deregister WP jQuery
        wp_deregister_script( 'jquery-core' );
        // Deregister WP jQuery Migrate
        wp_deregister_script( 'jquery-migrate' );

        // Register jQuery in the head
        wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );

        /**
         * Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
         * see /wordpress/283828/wp-register-script-multiple-identifiers
         * We first register the script and afther that we enqueue it, see why:
         * /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * /programming/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
         */
        wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );


function add_jquery_attributes( $tag, $handle ) {
    if ( 'jquery-core' === $handle ) {
        return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.