তৃতীয় পক্ষের কি $ wp_scriptts / p wp_styles-> add_data ব্যবহার করা উচিত?


31

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মাত্রিক মাত্রায় বহুমাত্রিক অ্যারে পরিচালনা করে।

এই পদ্ধতিটি নিম্নলিখিত কারণগুলির জন্য সত্যই ভাল কাজ করছে বলে মনে হচ্ছে:

  1. এটি আপনাকে স্ক্রিপ্ট হ্যান্ডেলের সাথে ডেটা সংযুক্ত করার অনুমতি দেয় যাতে এটি সর্বদা সঠিকভাবে স্ক্রিপ্টের সাথে সজ্জিত থাকে। আরও, এটি স্ক্রিপ্ট, স্ক্রিপ্ট ক্রম এবং স্ক্রিপ্ট স্থান নির্ধারণের জন্য বুদ্ধিমান হবে।
  2. এটি আপনাকে জেএসকে বার্তা প্রেরণের জন্য পিএইচপি ব্যবহার করতে দেয়।
  3. এটি 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), এটি কোনও এনকুইড স্ক্রিপ্টের আগে স্বেচ্ছাসেবী জেএস ইনজেক্ট করার উপযুক্ত যুক্তিসঙ্গত উপায় বলে মনে হয়।

আমি এর কোনও "সঠিক" উত্তর আছে বলে আমি কল্পনা করি না, তবে অন্যান্য দেবগণ কী মনে করেন তা শুনতে ভাল লাগবে। আমি আরও কল্পনা করেছিলাম যে এই ধাঁধাটির কয়েকটি টুকরো রয়েছে যা আমি পুরোপুরি অবহেলা করেছি এবং এটি সম্পর্কে অন্যদের কী বলতে হবে তা শুনতে ভাল লাগবে।

উত্তর:


4

এই ফাংশনটি স্ক্রিপ্ট / স্টাইলগুলিতে ডেটা যুক্ত করে যা ওয়ার্ডপ্রেস লোড চলাকালীন তৈরি করা হয়েছিল।

আসলে তা না. এটি স্ক্রিপ্ট / স্টাইলগুলিতে ডেটা যুক্ত করে registered

সেট করা ডেটা কীটি wp_localize_scriptশেষ পর্যন্ত কল করে ওভাররাইট করা হয় $wp_scripts->add_data, আপনি wp_localize_scriptএকই স্ক্রিপ্টের জন্য দু'বার কল করলে স্ট্রিংটি যথাযথভাবে সংক্ষিপ্ত হয়ে যায়।

ঠিক। তারা উভয়ই অন্তর্নিহিত (অ্যাক্সেসযোগ্য, অভ্যন্তরীণ) এপিআই কল করে, তাই এটি ওভাররাইট হয়ে যায় (যেমন আপনি বলেছেন)। এটি যখন আসে তখন এটি ঘটে $this->get_data( $handle, 'data' );

প্রশ্ন

আমার মূল প্রশ্নটি: বিকাশকারীদের এই ফাংশনটি ব্যবহার করা উচিত?

উত্তর

সরলভাবে বলেছিলেন: হ্যাঁ, যখন আপনার প্রয়োজন মতো করার কোনও সুযোগ নেই।

অন্য উদাহরণ: কোনও স্ক্রিপ্ট নিবন্ধিত হয়েছে কিনা তা পরীক্ষা করুন (উদাহরণস্বরূপ json2/jquery) এবং এটি ফুটারে সরান (চেক extra['group'])।

// Move scripts to the footer - in case it isn't already there
if ( ! $wp_scripts->get_data( 'json2', 'group' ) )
    $wp_scripts->add_data( 'json2', 'group', 1 );

if ( ! $wp_scripts->get_data( 'jquery', 'group' ) )
    $wp_scripts->add_data( 'jquery', 'group', 1 );

দ্রষ্টব্য: এই under কেবলমাত্র অধীন দায়ের করা তথ্যের জন্য কাজ করে extra!

অতিরিক্ত নোট

পাল্টা প্রশ্ন: আপনি কি কখনও कोर দ্বারা নিবন্ধিত লিপিগুলিতে নির্ভরতা যুক্ত করার চেষ্টা করেছেন? যেমন: JSON2প্রয়োজনীয় ডিপগুলি যুক্ত করার চেষ্টা করুন jQuery। বাধা না দিয়ে এটি সম্ভব নয় global $wp_scripts:

global $wp_scripts;

$scripts = array( 
     'jquery'      => array( 'json2' )
    ,'jquery-form' => array( 'json2' ) 
);

foreach ( $scripts as $handle => $deps )
{
    // Ugly hack: Intercept the global to force the "natural"/needed order: JSON2 » jQuery
    $deps_default =& $wp_scripts->registered[ $handle ]->deps;
    $wp_scripts->registered[ $handle ]->deps = array_merge( $deps_default, $deps );
}

ক্লাসটি করতে পারে না এমন পুরো জিনিস রয়েছে। সুতরাং মতো কিছু ব্যবহার ->add_data()করা ইমো সম্পূর্ণরূপে বৈধ। আপনি যা পেয়েছেন কেবল তা ব্যবহার করুন, কেননা এটি এখনও ক্লাসের অভাবে বেঁচে থাকার চেয়ে আরও ভাল।


"কোর ডিফল্ট এবং অন্তর্নির্মিত স্ক্রিপ্টগুলিতে নির্ভরতা যুক্ত করতে কোনও সম্ভাবনা যোগ না করা পর্যন্ত অপেক্ষা করুন" আপনি ট্র্যাকটিতে কোনও টিকিট খুললেন?
scribu

@ স্ক্রিবু ধন্যবাদ, তবে না, আমার নেই এবং নেই, আমিও করব না। আমার সমস্ত টিকিট কেবল সেখানে পচে গেছে, তাই আমি ট্র্যাকের টিকিটে বিনিয়োগের প্রচেষ্টা থেকে ফিরে এসেছি। এটি কোনও অপরাধ নয়, আমি এখন পর্যন্ত যা অভিজ্ঞতা অর্জন করেছি তার থেকে কেবল একটি উপসংহার। তবে আপনার সাথে তর্ক শুরু না করার জন্য, আমি এটিকে সরিয়ে ফেলব কারণ এটি আমার প্লাগইনগুলির একটি থেকে একটি সাধারণ অনুলিপি / পেস্ট থেকে সবেমাত্র বাকী।
কায়সার

ঠিক আছে, তাহলে আমি অনুমান করি যে আমাকে এখানে জিজ্ঞাসা করতে হবে: jQuery এর আগে JSON2 লোড করার সুবিধা কী হবে?
স্ক্রিবু

কিছুই না, এটি একটি বিমূর্ত উদাহরণ হিসাবে। আপনি আরো বিস্তারিত ভাবে উদাহরণস্বরূপ খুঁজতে চেষ্টা চান তাহলে, তারপর আপনি এক গ্রন্থাগার যে চাহিদা কল্পনা করতে পারে JSON2, কিন্তু আগে লোড পেতে প্রয়োজন jQueryদাও, তা নাম UberjQuery। বিটিডব্লিউ: আপনি ডিগজিনকে কেন্দ্র করে বেশ ভাল করছেন, কেন আপনি সময় নিচ্ছেন এবং উত্তর লিখবেন না? আমার ধারণা এটি পড়ার সময় হবে be
কায়সার

আপনার চিন্তা কায়সার জন্য ধন্যবাদ! আমি অবশ্যই জেএস যুক্ত করার জন্য পদ্ধতিগুলি খুঁজছি যা "এপিআই" দ্বারা সমর্থিত। যদিও আমি জানি আমি এটিকে সমস্ত ধরণের কাজ করতে বাঁকতে পারি, যা অস্থির কোডের দিকে নিয়ে যেতে পারে। এটি কী করতে পারে তার চেয়ে এটি কী উদ্দেশ্যে তৈরি হয়েছে তা জানতে পেরে খুব সুন্দর হয়েছে এবং এটি অবশ্যই অনেক কিছু করা যায়।
টোলম্যান্জ

1

স্ক্রিপ্ট ডেটা কীভাবে পরিচালনা করতে হবে সে সম্পর্কে ডব্লিউপি ৩.৩ এ একটি বড় বিতর্ক ছিল:

http://core.trac.wordpress.org/ticket/11520

মনে রাখবেন যে আপনি এখন নেস্টেড অ্যারেগুলি পাস করতে পারবেনwp_localize_data() :

wp_localize_script( 'jquery', 'jQueryL10n', array(
    'foo' => array(
        'bar' => array( 'apple', 'orange' )
    ),
) );

সুতরাং, আমি কী করব তার জন্য add_data()যদি উচ্চ স্তরের এপিআই না থাকে তবে আমি ব্যবহার করতাম, এই বোঝার সাথে যে এর আচরণটি কিছু প্রান্তের ক্ষেত্রে পরিবর্তিত হতে পারে, যেমন যখন কনটেন্টেশন জড়িত থাকে।


আপনার ইনপুট স্ক্রিবু জন্য আপনাকে ধন্যবাদ! মজার যে আপনি যে টিকিট লিঙ্ক! আমি আমার পোস্টে এটির সাথে লিঙ্ক করেছি, তবে এতটা চলছে যে আমি বহুমাত্রিক অ্যারেগুলিকে এখন সমর্থন করে তা ধরিনি।
টোলম্যান্জ

হা ... সুন্দর সম্পাদনা! আমি যে টিকিট ভেবেছিলাম তেমন বিভ্রান্ত হইনি।
টোলম্যান্জ

@ টোলম্যানজ হ্যাঁ, এটি বেশ বিভ্রান্তিকর, বিশেষত যদি আপনি তখন আইআরসি তে না থাকতেন।
স্ক্রিবু

মিঃ @ অঙ্গেস্টাল্টবার কিছু মাস আগে আমাকে বহুমাত্রিক অ্যারে যুক্ত করার উপায় দেখিয়েছিলেন। জানেন না, এটি ইতিমধ্যে মূল বিষয়।
কায়সার

@ স্ক্রিবু - ইতিমধ্যে বহুমাত্রিক অ্যারেগুলির জন্য সমর্থন নেই? - কমপক্ষে আমি কোনও সমস্যা ছাড়াই এগুলি ব্যবহার করি ...
স্টিফেন হ্যারিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.