WP_Dependencies
कक्षा के भीतर नाम की एक विधि मौजूद है add_data
। यह फ़ंक्शन उन स्क्रिप्ट / शैलियों में डेटा जोड़ता है जिन्हें वर्डप्रेस लोड के दौरान एन्क्यूट किया गया है। इस फ़ंक्शन के लिए एक सामान्य रूप से उद्धृत उपयोग आईई के विभिन्न संस्करणों में लक्षित स्टाइलशीट्स को जोड़ने पर एक सशर्त जोड़ने के लिए है। उदाहरण के लिए, IE8 और निम्न को लक्षित करने के लिए:
function test_wp_print_styles() {
global $wp_styles;
wp_enqueue_style( 'test-style', get_template_directory_uri() . '/css/test.css', array(), 1, 'all' );
$wp_styles->add_data( 'test-style', 'conditional', 'lte ie8' );
}
add_action( 'wp_print_styles', 'test_wp_print_styles' );
यह इस प्रकार प्रस्तुत करेगा:
<!--[if lte ie8]>
<link rel='stylesheet' id='test-style-css' href='http://trunkosaurus.dev/wp-content/themes/twentyeleven/css/test.css?ver=1' type='text/css' media='all' />
<![endif]-->
जब मैं कोर के माध्यम से देखता हूं, तो मैं उन मुट्ठी भर स्थानों को देखता हूं जहां इस पद्धति का उपयोग किया जाता है:
WP_Styles->add_inline_style()
: संदर्भित स्टाइलशीट के माध्यम से इनलाइन शैली जोड़ता है (द्वारा किया गयाWP_Styles->print_inline_style()
)WP_Scripts->localize()
: एक जसन एन्कोडेड ऑब्जेक्ट जोड़ता है (अधिक "सार्वजनिक"wp_localize_script()
फ़ंक्शन द्वारा लिपटा )wp_plupload_default_settings()
: 'wp-plupload' स्क्रिप्ट के लिए json एनकोडेड ऑब्जेक्ट (एक बहुआयामी सरणी से बनाया गया) जोड़ता है (ध्यान दें कि यह 3.4 में आगामी है)स्क्रिप्ट और शैलियों का पंजीकरण / एनक्यूइंग करते समय डिफ़ॉल्ट स्क्रिप्ट के लिए डेटा जोड़ना (
wp-includes/script-loader.php
)
विधि के उपयोग के माध्यम से पढ़ने से, यह एक विशिष्ट उपयोग के मामले में प्रकट नहीं होता है। में wp_plupload_default_settings
, यह मनमाना डेटा इंजेक्शन के लिए अनुमति देता है। इसमें wp_register_script
, हेडर और फुटर स्क्रिप्ट के बीच अंतर करने के लिए इसका उपयोग किया जाता है। में add_inline_style
, यह इनलाइन शैली उसके बाद एक निर्धारित स्टाइलशीट कतारबद्ध है जोड़ा जाना चाहिए निरूपित किया जाता है।
इस फ़ंक्शन के लिए एक उत्कृष्ट उपयोग निम्नलिखित कोड की तरह कुछ होगा जहां आप एक बाहरी स्क्रिप्ट की व्याख्या कर रहे हैं, लेकिन इसे कुछ कॉन्फ़िगरेशन संस्करण भेजने की आवश्यकता है, जिनमें से कुछ डीबी से आते हैं:
function zdt_enqueue_add_this() {
global $wp_scripts;
wp_enqueue_script( 'zdt-add-this', 'http://s7.addthis.com/js/250/addthis_widget.js#pubid=myidhere' );
// Contrived example of database call to get a twitter handle stored in the db
$author_twitter_handle = zdt_get_twitter_handle();
$js = "var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @" . sanitize_key( $author_twitter_handle ) . "' } };\n";
$js .= 'var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };';
$wp_scripts->add_data( 'zdt-add-this', 'data', $js );
}
add_action( 'wp_enqueue_scripts', 'zdt_enqueue_add_this' );
यह परिणाम होगा:
<script type='text/javascript'>
/* <![CDATA[ */
var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @tollmanz' } };
var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };
/* ]]> */
</script>
<script type='text/javascript' src='http://s7.addthis.com/js/250/addthis_widget.js?ver=3.4-beta4-20731#pubid=myidhere'></script>
ध्यान दें कि इसे पूरा नहीं किया जा सकता है wp_localize_script
क्योंकि addthis_share
ऑब्जेक्ट में गुण हैं ( मैंने पहले इस बारे में कुछ हद तक हैक किया था )।
संपादित करें: मैं इसे बताते हुए गलत था। wp_localize_script
बहुआयामी सरणियों को ठीक से संभालता है।
यह विधि निम्नलिखित कारणों से वास्तव में अच्छी तरह से काम करती है:
- यह आपको स्क्रिप्ट हैंडल से डेटा संलग्न करने की अनुमति देता है ताकि यह हमेशा स्क्रिप्ट के साथ ठीक से संलग्न हो। इसके अलावा, यह स्क्रिप्ट, स्क्रिप्ट ऑर्डर और स्क्रिप्ट प्लेसमेंट को समाप्त करने के बारे में बुद्धिमान होगा।
- यह आपको JS में var भेजने के लिए PHP का उपयोग करने की अनुमति देता है।
- यह
wp_print_styles
कुछ मनमानी स्क्रिप्ट को प्रिंट करने के लिए उपयोग करने से अधिक व्यवस्थित लगता है जो बाद में एक लिपिबद्ध स्क्रिप्ट द्वारा कार्य किया जाता है।
कुछ चीजें हैं जो उम्मीद के मुताबिक काम नहीं करती हैं जो मुझे इस पद्धति के बारे में चिंतित करती हैं। ऐसा ही एक मुद्दा यह है कि यदि आप wp_localize_script
साथ में उपयोग करते हैं $wp_scripts->add_data
, तो आप अप्रत्याशित परिणाम प्राप्त कर सकते हैं। उदाहरण के लिए:
// Contrived example of database call to get a twitter handle stored in the db
$author_twitter_handle = zdt_get_twitter_handle();
$js = "var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @" . sanitize_key( $author_twitter_handle ) . "' } };\n";
$js .= 'var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };';
$wp_scripts->add_data( 'zdt-add-this', 'data', $js );
wp_localize_script( 'zdt-add-this', 'addthis_share', array( 'var' => 'val' ) );
पैदा करता है:
<script type='text/javascript'>
/* <![CDATA[ */
var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @tollmanz' } };
var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };
var addthis_share = {"var":"val"};
/* ]]> */
</script>
<script type='text/javascript' src='http://s7.addthis.com/js/250/addthis_widget.js?ver=3.4-beta4-20731#pubid=myidhere'></script>
जबकि यह स्क्रिप्ट:
// Contrived example of database call to get a twitter handle stored in the db
$author_twitter_handle = zdt_get_twitter_handle();
$js = "var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @" . sanitize_key( $author_twitter_handle ) . "' } };\n";
$js .= 'var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };';
wp_localize_script( 'zdt-add-this', 'addthis_share', array( 'var' => 'val' ) );
$wp_scripts->add_data( 'zdt-add-this', 'data', $js );
पैदा करता है:
<script type='text/javascript'>
/* <![CDATA[ */
var addthis_share = { templates : { twitter: '{{title}} {{url}} (by @tollmanz' } };
var addthis_config = { ui_header_color: "#FFFFFF", ui_header_background: "#FA9628", ui_cobrand: "My Site" };
/* ]]> */
</script>
<script type='text/javascript' src='http://s7.addthis.com/js/250/addthis_widget.js?ver=3.4-beta4-20731#pubid=myidhere'></script>
इसके data
द्वारा सेट की गई कुंजी wp_localize_script
को अंततः कॉल द्वारा अधिलेखित कर दिया जाता है $wp_scripts->add_data
, जबकि यदि आप wp_localize_script
एक ही स्क्रिप्ट के लिए दो बार कॉल करते हैं, तो स्ट्रिंग ठीक से समतल हो जाएगी।
जबकि यह सब एक लिपिबद्ध स्क्रिप्ट के साथ उपयोग के लिए मनमानी स्क्रिप्ट को प्रिंट करने का एक बहुत आसान तरीका है, यह मुझे लगता है कि संघर्षों की क्षमता के कारण इसका व्यापक रूप से उपयोग नहीं किया जाना चाहिए। मैं निश्चित रूप से व्यक्तिगत परियोजनाओं में इसका उपयोग करने के लिए एक तर्क देख सकता हूं जहां कोड का उपयोग सामुदायिक प्लगइन्स / थीम में नहीं किया जाएगा।
मैंने यह देखने के लिए कोर ट्रेक को देखा कि क्या फ़ंक्शन के उद्देश्य के रूप में कोई सुराग था। मुझे एक टिकट मिला (http://core.trac.wordpress.org/ticket/11520) (उस पर एक महाकाव्य) जिसने मनमाने ढंग से जेएस को जोड़ने के अन्य तरीकों की खोज की। इसलिए ऐसा लगता है कि जेएस को जोड़ने के लिए एक बेहतर तरीका बनाने में रुचि है, लेकिन निश्चित रूप से नहीं अगर add_data
प्रक्रिया का हिस्सा होना चाहिए।
मेरा मुख्य प्रश्न है: क्या डेवलपर्स को इस फ़ंक्शन का उपयोग करना चाहिए? कुछ मामलों में (उदाहरण के लिए wp_register_script
), यह एक "निजी" फ़ंक्शन की तरह लगता है जिसे तीसरे पक्ष का उपयोग नहीं करना चाहिए; हालाँकि, अन्य मामलों में (उदाहरण के लिए wp_plupload_default_settings
), यह एक पूरी तरह से उचित तरीके से लगता है कि मनमाने ढंग से जेएस को इंजेक्ट करने से पहले एक लिपिबद्ध है।
मुझे नहीं लगता कि इस बारे में कोई "सही" उत्तर है, लेकिन यह सुनना अच्छा लगेगा कि अन्य देवता क्या सोचते हैं। मैं यह भी कल्पना करता हूं कि इस पहेली के टुकड़े हैं जिन्हें मैंने पूरी तरह से उपेक्षित किया है और यह सुनना अच्छा लगेगा कि दूसरों को इसके बारे में क्या कहना है।