2013-10-03 15 views
5

के भीतर आवश्यक जेएस का उपयोग करके मैं वर्डप्रेस के साथ काम करने और एकीकृत करने के लिए अपनी पसंदीदा आवश्यकताएं रखने के लिए एक तरीका स्थापित कर रहा हूं।वर्डप्रेस

बड़ी समस्या यह है कि jquery को कैसे लोड किया जाए। वर्डप्रेस wp_enqueue_script के माध्यम से jQuery लोड करता है जिसे इस तरह से रहने की आवश्यकता होती है क्योंकि कुछ वर्डप्रेस प्लगइन्स जिन्हें मैं नियमित रूप से उपयोग करता हूं, उस तरह से जोड़ने के लिए jquery की आवश्यकता होती है। मैं अपने जरूरी जेएस सेटअप के भीतर jQuery का दूसरा संस्करण लोड नहीं करना चाहता हूं। तो, के बाद कुछ इस चारों ओर देख मैं क्या लेकर आए हैं है:

टेम्पलेट्स/footer.php

<script> 
if (typeof jQuery === 'function') { 
    define('jquery', function() { return jQuery; }); 
} 

require(['/assets/js/sample-common.js'], function (common) { 
    require(['sample-bootstrapper']); 
}); 
</script> 

अगर jQuery पहले से ही पेज में जोड़ दिया गया है, अगर यह तो किया गया है जो देखता है यह इसे मॉड्यूल मान के रूप में सेट करता है।

मेरा प्रश्न मैं तो बस jQuery छोड़ ग्लोबल नेम स्पेस में होना चाहिए, या इन निर्देशों का पालन है:

http://requirejs.org/docs/jquery.html#noconflictmap

ऊपर के साथ समस्या यह मैं शायद jQuery वाले प्लग इन नहीं कर रहे शामिल करने के लिए की आवश्यकता होगी एएमडी संगत नहीं है, क्या उन्हें एएमडी संगत बनाने का कोई प्रयास है या किसी अन्य समाधान के बारे में मैंने सोचा था कि नोकफ्लिक्ट घोषणा से सच को हटा रहा था जो वैश्विक नामस्थान में 'jQuery' को प्लगइन को काम करने की इजाजत देता है।

यह कम अभ्यास सलाह के लिए एक प्रश्न और अधिक कॉल का कम है। और किसी भी बहुत सराहना की जाएगी!

धन्यवाद!

+0

मुझे लगता है कि आपको अभी भी अपनी आवश्यकता में 'jquery' डालना होगा, इसके अलावा इसे परिभाषित करने के अलावा? – WraithKenny

उत्तर

0

वर्डप्रेस jQuery को एनक्यूज करता है क्योंकि यह एक स्क्रिप्ट है, आपको अपनी स्क्रिप्ट के लिए भी ऐसा ही करना चाहिए क्योंकि इसका मतलब है कि वर्डप्रेस आपके लिए निर्भरताओं को अच्छी तरह से संभाल सकता है। यह भी ध्यान दें कि प्लगइन विवादों को रोकने के लिए वर्डप्रेस की बंडल jQuery पहले से ही noConflict() मोड में लोड हो चुकी है।

यदि आप jQuery को स्क्रिप्ट की निर्भरताओं में से एक के रूप में निर्दिष्ट करते हैं तो वर्डप्रेस इसे किसी भी पृष्ठ पर जोड़ देगा जो उस पर निर्भर करता है जो स्क्रिप्ट जोड़ता है - लेकिन केवल तभी जब इसे पहले ही लोड नहीं किया गया है (यह केवल इसे नहीं जोड़ा जाएगा दूसरी बार)।

अपडेट: @brasofilo टिप्पणी के अनुसार get_stylesheet_directory() फ़ंक्शन बच्चे और फिर माता-पिता की खोज करता है यदि बच्चे में कुछ भी मेल नहीं खाता है। माता-पिता और बाल थीम स्थितियों दोनों में get_stylesheet_directory() का उपयोग करने के लिए सुरक्षित।

WP कोडेक्स से लिया और संशोधित: http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 

यह यहाँ ध्यान देने योग्य बात यह है कि अगर अपनी स्क्रिप्ट एक बच्चे विषय निर्देशिका में है, तो आप get_template_directory_uri() बाहर स्वैप और get_stylesheet_directory_uri() से बदलने चाहिए लायक है।

+1

'get_stylesheet_' बच्चे के लिए खोजें और यदि मौजूद नहीं है, तो माता-पिता की खोज, यानी किसी भी परिस्थिति में सुरक्षित रूप से उपयोग किया जा सकता है। – brasofilo

+0

शायद मुझे लिंक किए गए कोडेक्स पेज में '$ src' paramiter के बारे में अनुभाग में नोट किया जाना चाहिए ... इसे @brasofilo को इंगित करने के लिए धन्यवाद :) –

+1

आपके उत्तर विलियम के लिए धन्यवाद। मैं समझता हूं कि मुझे शायद मेरी सभी स्क्रिप्ट लोडिंग के लिए wp_enqueue_script पर चिपकना चाहिए, लेकिन मैं जेएस की आवश्यकता के साथ रहना पसंद करूंगा क्योंकि इस तरह मैं वर्डप्रेस के बाहर कोड करता हूं और जैसे ही मैं उन्हें WP में एकीकृत करने से पहले अपने टेम्पलेट्स का निर्माण करता हूं, मैं अपने प्रतिबिंबित नहीं करना चाहता फिट करने के लिए कोड। – FlimFlam