একটি প্লাগইনে get_template_part () ব্যবহার করে কোনও ফাইল কীভাবে অন্তর্ভুক্ত করবেন?


13

খুব সহজ প্রশ্ন হতে পারে তবে আমি লড়াই করছি। থিম বিকাশে, আমি get_template_part()অনেকবার কাজ করেছি এবং আমি এর মূল বিষয়গুলি বুঝতে পারি। তবে যখন আমি একটি প্লাগইন বিকাশ করছি তখন আমি এটি ব্যবহার করে আমাকে কিছু ত্রুটি দেখিয়ে ভাবছিলাম:

বিজ্ঞপ্তি: অপরিজ্ঞাত ধ্রুবক স্টাইলশীটপাথের ব্যবহার - ...\wp-includes\template.php407 লাইনে 'স্টাইলশীপথ' ধরে নেওয়া

এবং

বিজ্ঞপ্তি: অপরিজ্ঞিত ধ্রুবক TEMPLATEPATH ব্যবহার - ...\wp-includes\template.php410 লাইনে 'TEMPLATEPATH' ধরে নেওয়া

সমস্যাটি গুগল করা একটি সমর্থন ঠিক করেছে:

তবে এটি একটি বিশাল কাজ বলে মনে হচ্ছে - আমি সন্দেহ করি। আমি মনে করি এটি খুব জটিল হওয়া উচিত নয়। আমি এই ডাব্লুপিএসই উত্তরটি যাচাই করেছি এবং কোডের এই লাইনটি পেয়েছি:

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

যেখানে পিএইচপি include()ফাংশন রয়েছে। আমার ওয়ার্ডপ্রেস জ্ঞান অনুসারে আমি get_template_part()পিএইচপি এর চেয়ে বেশি পছন্দ করতে শিখেছি include()। তারপরে আমি ঠিক কীভাবে get_template_part()আমার প্লাগিনে একটি সাধারণ ব্যবহার করতে পারি।

আমি কোনও লুপ বা কিছু ব্যবহার করছি না, আমি কেবল আমার প্লাগইন কোডটি বিভিন্ন ফাইলে আলাদা করে দিচ্ছি (বা আপনি বলতে পারেন সংগঠিত করতে) যাতে কিছু ক্ষেত্রে, আমি কেবল তাদের মন্তব্য করতে পারি যেখানে সেগুলি অপরিহার্য নয় drop আমি চেষ্টা করেছিলাম:

get_template_part( 'my', 'special-admin' );

এবং তারপরে ত্রুটির পরে এটিকে পরিবর্তন করুন:

get_template_part( 'my', 'specialadmin' );

তবে আপনি জানেন যে এটি সমস্যা নয়। আমি স্থানীয় সার্ভারে থাকি, ডাব্লুএএমপি ব্যবহার করে।

উত্তর:


11

get_template_partএকটি থিম ফাংশন। আপনি এই ফাংশনটি দিয়ে প্লাগইন ফাইলগুলি লোড করতে পারবেন না। উত্সটি একবার দেখুন এবং আপনি লক্ষ্য করেছেন যে কাজটি সম্পন্ন হয়েছে locate_templateউত্সটি দেখুন এবং আপনি দেখতে পাবেন যে এটি সর্বদা থিম ডিরেক্টরি থেকে লোড হয় ।

তবে আপনি get_template_partএটি ব্যবহার করতে চাইতে পারেন এটি হ'ল ভুল ফাংশন।

includeআপনার আপনার ফাইলগুলির প্রয়োজন হবে ।

কারণটি, তাই এটি আমার কাছে মনে হয়, কারণ get_template_partথিমগুলি প্রসারিত করার অনুমতি দেওয়া - ওরফে, শিশুদের থিমগুলি তৈরি করা সহজ করে দেওয়া। প্লাগইনগুলি সেভাবে প্রসারিত করার উদ্দেশ্যে নয় তাই get_template_partকোনও প্লাগইন সমতুল্য বা প্রয়োজন নেই ।


6

@ s_ha_dum এটি সঠিক যে get_template_partএটি একটি থিম ফাংশন, তবে তিনি ভুল যে প্লাগইনগুলি এইভাবে বাড়ানো নয়। এটি কেবল আরও জটিল।

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

মূলত, এটি থিমের একটি বিশেষ ফোল্ডারে দেখায়, তারপরে যদি এটি না পাওয়া যায় তবে এটি প্লাগইনটির টেম্পলেট ফোল্ডারের মধ্যে দেখায়।


4

যেমন আগেই বলা হয়েছিল, আপনি get_template_partপ্লাগইনগুলিতে ব্যবহার করতে পারবেন না , তবে গিথুব (গ্যারি জোন্স দ্বারা নির্মিত) -এ একটি সহজ শ্রেণি রয়েছে যা নকল করেget_template_part প্লাগইনগুলিতে কার্যকারিতা , ফ্যালব্যাকে (চাইল্ড থিম> প্যারেন্ট থিম> প্লাগইন) এ প্লাগইন যুক্ত করে।

এইভাবে, আপনি আপনার প্লাগইনটির "টেম্পলেট অংশ" শিশু থিম বা পিতামাতার থিমের মধ্যে ওভাররাইড করতে পারেন।

ব্যবহার (গিথুব রেপো নির্দেশাবলী থেকে নেওয়া):

  1. কপি class-gamajo-template-loader.phpআপনার প্লাগ ইন করুন। এটি প্লাগইন রুটের কোনও ফাইলের মধ্যে থাকতে পারে বা আরও ভাল এটি একটি ডিরেক্টরি অন্তর্ভুক্ত করে।
  2. একটি নতুন ফাইল তৈরি করুন, যেমন class-your-plugin-template-loader.phpএকই ডিরেক্টরিতে ।
  3. classপ্রসারিত যে ফাইল একটি তৈরি করুন Gamajo_Template_Loader
  4. আপনার প্লাগইন অনুসারে শ্রেণীর বৈশিষ্ট্যগুলি ওভাররাইড করুন। আপনি get_templates_dir()যদি পদ্ধতিটি সঠিক না করেন তবে আপনি ওভাররাইডও করতে পারেন।
  5. আপনি এখন আপনার কাস্টম টেম্পলেট লোডার শ্রেণি ইনস্ট্যান্ট করতে পারেন এবং get_template_part()পদ্ধতিটি কল করতে এটি ব্যবহার করতে পারেন । এটি কোনও শর্টকোড কলব্যাকের মধ্যে বা থিম বিকাশকারীদের তাদের ফাইলগুলিতে অন্তর্ভুক্ত করতে চাইলে কিছু হতে পারে।

উদাহরণ কোড:

// Template loader instantiated elsewhere, such as the main plugin file.
$meal_planner_template_loader = new Meal_Planner_Template_Loader;

// Use it to call the get_template_part() method. This could be within 
// a shortcode callback, or something you want theme developers 
// to include in their files.
$meal_planner_template_loader->get_template_part( 'recipe' );

// If you want to pass data to the template, call the set_template_data() 
// method with an array before calling get_template_part().        
// set_template_data() returns the loader object to allow for method chaining.
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data );
    ->get_template_part( 'recipe' );

// The value of bar is now available inside the recipe template as $data->foo.
// If you wish to use a different variable name, add a second parameter 
// to set_template_data():
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data, 'context' )
    ->get_template_part( 'recipe', 'ingredients' );

// The value of bar is now available inside the recipe template as $context->foo.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.