WP_Dependencies
বর্গের মধ্যে একটি পদ্ধতি রয়েছে যার নাম রয়েছে add_data
। এই ফাংশনটি স্ক্রিপ্ট / স্টাইলগুলিতে ডেটা যুক্ত করে যা ওয়ার্ডপ্রেস লোড চলাকালীন তৈরি করা হয়েছিল। এই ফাংশনের জন্য একটি সাধারণভাবে উদ্ধৃত ব্যবহার হ'ল আই এর বিভিন্ন সংস্করণে লক্ষ্যযুক্ত স্টাইলশিট যুক্ত করার সময় শর্তযুক্ত যোগ করা। উদাহরণস্বরূপ, আইই 8 এবং নিম্নটিকে টার্গেট করা:
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()
: 'ডাব্লুপিপি-প্লুপলোড' স্ক্রিপ্টের জন্য জেসন এনকোডেড অবজেক্ট (একটি বহুমাত্রিক অ্যারে থেকে তৈরি) যুক্ত করেছে (দ্রষ্টব্য যে এটি আগামি 3..৪-এ আসবে)স্ক্রিপ্টগুলি এবং শৈলীর নিবন্ধকরণ / সম্পাদন করার সময় ডিফল্ট স্ক্রিপ্টগুলির জন্য ডেটা যুক্ত করা হয় (
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
মাত্রিক মাত্রায় বহুমাত্রিক অ্যারে পরিচালনা করে।
এই পদ্ধতিটি নিম্নলিখিত কারণগুলির জন্য সত্যই ভাল কাজ করছে বলে মনে হচ্ছে:
- এটি আপনাকে স্ক্রিপ্ট হ্যান্ডেলের সাথে ডেটা সংযুক্ত করার অনুমতি দেয় যাতে এটি সর্বদা সঠিকভাবে স্ক্রিপ্টের সাথে সজ্জিত থাকে। আরও, এটি স্ক্রিপ্ট, স্ক্রিপ্ট ক্রম এবং স্ক্রিপ্ট স্থান নির্ধারণের জন্য বুদ্ধিমান হবে।
- এটি আপনাকে জেএসকে বার্তা প্রেরণের জন্য পিএইচপি ব্যবহার করতে দেয়।
- এটি
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
), এটি কোনও এনকুইড স্ক্রিপ্টের আগে স্বেচ্ছাসেবী জেএস ইনজেক্ট করার উপযুক্ত যুক্তিসঙ্গত উপায় বলে মনে হয়।
আমি এর কোনও "সঠিক" উত্তর আছে বলে আমি কল্পনা করি না, তবে অন্যান্য দেবগণ কী মনে করেন তা শুনতে ভাল লাগবে। আমি আরও কল্পনা করেছিলাম যে এই ধাঁধাটির কয়েকটি টুকরো রয়েছে যা আমি পুরোপুরি অবহেলা করেছি এবং এটি সম্পর্কে অন্যদের কী বলতে হবে তা শুনতে ভাল লাগবে।