बाल विषय में जावास्क्रिप्ट फ़ाइलों को कैसे ओवरराइड करें?


35

मैं मूल विषय में कुछ जावास्क्रिप्ट फाइलें लोड कर रहा हूं। मूल विषय में पथ है:

scripts > custom.js

बाल विषय में, मैं एक ही पथ बना रहा हूं ( scripts > custom.js) और custom.jsफ़ाइल के अंदर कुछ jQuery बदल रहा हूं ।

समस्या यह है कि परिवर्तन लागू नहीं किए जा रहे हैं। क्या यह बाल विषय में इन फ़ाइलों में परिवर्तन करने का गलत तरीका है?


1
मूल विषय क्या है? पैरेंट थीम द्वारा स्क्रिप्ट को कैसे बुलाया जा रहा है ?
चिप बेनेट

जवाबों:


51

बाल विषय केवल php फ़ाइलों (जैसे शीर्षलेख .php) को ओवरराइड करते हैं जो get_template_part या get_header, आदि जैसे फ़ंक्शंस के साथ शामिल होते हैं।

वर्डप्रेस में स्क्रिप्ट जोड़ने का सही तरीका wp_enqueue_script है । यदि आपका मूल विषय इसका उपयोग करता है, तो आप wp_dequeue_script का उपयोग करके और अपनी स्वयं की एन्करेज करके JS फ़ाइलों को ओवरराइड कर सकते हैं ।

इस तरह...

<?php
// hook in late to make sure the parent theme's registration 
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
    wp_dequeue_script('parent_theme_script_handle');
    wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}

यदि मूल विषय wp_enqueue_script का उपयोग नहीं कर रहा है, तो संभवतः यह वहां की लिपियों को प्रतिध्वनित करने के लिए wp_head (या wp_footer) में हुकिंग कर रहा है। तो आप स्क्रिप्ट हटाने के लिए उन कार्यों से छुटकारा पाने के लिए remove_action का उपयोग करेंगे, और फिर अपनी स्वयं की स्क्रिप्ट को संलग्न करेंगे।

यदि स्क्रिप्ट को टेम्प्लेट फ़ाइल में हार्ड कोड किया गया है, तो आपको स्क्रिप्ट टैग के बिना अपने बच्चे के विषय में उस टेम्प्लेट फ़ाइल को बदलना होगा।

यदि वे wp_enqueue_script कॉल का उपयोग करते हैं जो get_stylesheet_directory_uri का उपयोग करते हैं , तो आपको कुछ भी नहीं करना चाहिए। चूंकि यह नहीं हो रहा है, तो आपको बस इधर-उधर झांकना होगा और देखना होगा कि थीम लेखक ने क्या किया।


2
अगर माता-पिता विषय का उपयोग करता है को कतारबद्ध लिपियों के लिए get_stylesheet_directory_uri, तो बच्चे के विषय होगा है सभी स्क्रिप्ट इस प्रकार कतारबद्ध नकल करने, क्योंकि अन्यथा वे पाया जा woun't। यह जांचने के लिए get_stylesheet_directory_uri में कोई फ़ॉलबैक मैकेनिज़्म नहीं है कि क्या कोई व्यक्तिगत फ़ाइल चाइल्ड थीम में मौजूद है और यदि आवश्यक हो, तो पैरेंट थीम की फ़ाइल पर वापस आ जाए।

कोडेक्स से: “wp_print_scripts का उपयोग सामने के पृष्ठ पर शैलियों या लिपियों को समझने के लिए नहीं किया जाना चाहिए। इसके बजाय wp_enqueue_scripts का उपयोग करें। " Codex.wordpress.org/Plugin_API/Action_Reference/…
क्रिश्चियन लेस्क्यूयर

ध्यान रखें जब यह लिखा गया था: दो साल पहले। इससे पहले wp_enqueue_scriptsकि सामने के छोर पर केवल एन्क्यू स्क्रिप्ट्स का उपयोग किया जा सके। अपडेट किया गया। यदि आपको कुछ पुराना दिखाई देता है, तो बेझिझक संपादित करें।
क्रिसगिटेरिटुगी

4
कृपया ध्यान दें कि मूल विषय एन्केयू के बाद आपका पक्का होना सुनिश्चित करने के लिए आपको एक विलंबित प्राथमिकता (उदाहरण के लिए 100) निर्धारित करनी पड़ सकती है । add_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 ); से codex.wordpress.org/Function_Reference/wp_dequeue_script
Spone

4
2016 के लिए अपडेट: stackoverflow.com/questions/23507179/… के अनुसार हमें wp_deregister_script('parent-script-handle');मूल स्क्रिप्ट को पूरी तरह से हटाने के लिए भी उपयोग करना होगा। वास्तव में, यह मेरे लिए इसके बिना काम नहीं करता था। WP 4.6.1
PhiLho

1

कुछ मामलों में add_action और wp_enqueue_script फ़ंक्शन कॉल को प्राथमिकता देना महत्वपूर्ण है:

add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
    wp_dequeue_script('storefront-navigation');
    wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}

इस मामले में, माता-पिता द्वारा wp_enqueue_scripts को 20120206 (तारीख) की प्राथमिकता के साथ बुलाया गया था और इसलिए इस कार्रवाई को प्राथमिकता से बमुश्किल अधिक से अधिक जोड़ा जाता है ताकि इसे तुरंत समाप्त कर दिया जाए। उसके बाद, इस प्रकार के बातावरण कथन को वास्तव में प्राथमिकता दी जाती है ताकि यह सुनिश्चित किया जा सके कि यह पुराने के बाद समाप्त हो गया है। यह सच है, इस मामले में भी महत्वपूर्ण है क्योंकि यह निर्दिष्ट करता है कि यह पाद लेख में परिकल्पित किया जाना है, जो कि माता-पिता की स्क्रिप्ट में पहली बार लगाया गया था।

इसके अलावा, मैं इसे पूरी तरह से समझा नहीं सकता, लेकिन मुझे लगता है कि अगर आप इसे लागू करने के तुरंत बाद प्रारंभिक स्क्रिप्ट को हटाने में सावधानी बरतते हैं, तो ऐसा लगता है कि आप इसे प्रभावी रूप से पहली बार में लोड होने से रोक सकते हैं।


1
फ़ंक्शन में wp_enqueue_scriptप्राथमिकता पैरामीटर नहीं है, यह केवल एक संस्करण संख्या है जिसे पथ के अंत तक क्वेरी स्ट्रिंग के रूप में संक्षिप्त किया गया है। इस पैरामीटर का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि क्लायंट को कैशिंग की परवाह किए बिना सही संस्करण भेजा जाता है [...]
एमिल बर्जरॉन

1

अपना स्वयं का संस्करण पंजीकृत करने से पहले wp_deregister_script पर कॉल करें


1
क्यूं कर? यह केवल तभी आवश्यक है जब आप एक ही हैंडल का उपयोग कर रहे हों - ऐसा कुछ जो आपको करना नहीं है। आपको शायद यह भी नहीं करना चाहिए, क्योंकि कोड को डिबग करना आसान है जिसका स्रोत स्पष्ट है।
FUXIA

1
// enqueue your required script file
add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override');
function your_child_theme_js_file_override(){
    wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) );
}

// dequeue your required script file
function your_child_theme_js_file_dequeue() {
   wp_dequeue_script( 'parent_theme_script_handle' );
}
add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.