অবস্থান_টেমপ্লেট মাধ্যমে ভেরিয়েবল পাস করা


50

যদিও আমি সাধারণত ব্যবহার করেছি includeবা requireদীর্ঘ মেয়াদী কোড রক্ষণাবেক্ষণ সংরক্ষণ করতে তাদের নিজের উপর আমি ব্যবহার শুরু করেছি get_template_partএবং locate_templateহিসেবে ব্যবহার ওয়ার্ডপ্রেস কাপড় সালে নির্মিত সবসময় ভাল হয়।

আমার প্রশ্ন আপনি get_template_partবা হয় ফলাফলের মাধ্যমে ভেরিয়েবল পাস করতে সক্ষম হবেন বলে মনে করা হয় locate_template?

<?php
$var = get_option( 'my-custom-option' );

get_template_part( 'custom-template-part' );
?>

উপরের $varকোডটিতে কাস্টম টেমপ্লেটের অভ্যন্তরে মুদ্রিত হবে তবে ভেরিয়েবলটি কাজ করে বলে মনে হচ্ছে না। আমি কিছু অনুপস্থিত বা এই প্রত্যাশিত আচরণ?

আমি খুঁজে পেয়েছি যে তারা উপরের উদাহরণে বা সন্ধানে_প্লেস্টেট ব্যবহার করার সময় পাস করে না

<?php
locate_template( 'custom-template-part.php', true );
?>

উত্তর:


62

ম্যাথসম্যাথের মতো লিখেছেন , get_template () আপনার ভেরিয়েবলগুলির পুনরায় ব্যবহার সমর্থন করে না।

কিন্তু সনাক্ত করা_প্রেম () প্রকৃতপক্ষে কোনও অন্তর্ভুক্ত করে না। এটি কেবল অন্তর্ভুক্তির জন্য একটি ফাইল সনাক্ত করে।

সুতরাং আপনি যেমনটি আশা করেন ঠিক তেমনভাবে এই কাজটি অন্তর্ভুক্ত করে আপনি এর ব্যবহার করতে পারেন:

include(locate_template('custom-template-part.php'));

$var আপনার উদাহরণ থেকে টেমপ্লেট অংশে ব্যবহার করা যেতে পারে।

ভেরিয়েবল স্কোপ এবং get_template () এর আরও প্রযুক্তিগত ব্যাখ্যা সহ একটি সম্পর্কিত প্রশ্ন: get_template_part () সহ ফর্ম জমা দেওয়ার ত্রুটি


ভাল কল. আমি লক্ষ্য করিনি যে সনাক্ত করা_টেম্প্লেট () এর এমন একটি প্যারাম রয়েছে যা আপনাকে ফলাফলের (যা get_template_part করবে) দিয়ে লোড_টেম্পলেট () optionচ্ছিকভাবে কল করতে দেয় বা কেবল তাদের ফিরিয়ে দেয়। এই পদ্ধতির সাহায্যে কোড আপডেট করার জন্য আমি একটি বর্তমান প্রকল্পটি ফিরে করছি ... ধন্যবাদ!
ম্যাথসম্যাথ

আমি এখানে পোস্ট করার পরেই আমি একই পদ্ধতিটি ব্যবহার করে শেষ করেছি।
কার্টিজমলে

21676 এটি সম্বোধন করে তবে এটি প্রতিশ্রুতিবদ্ধ বলে মনে হয় না।
ইয়ান ডান

হয়তো তোমার দর্শন লগ করা ভুল কিন্তু: locate_template()Infact করে যদি প্যারামিটার হিসাবে সেট করা থাকে, অন্তর্ভুক্তি trueপ্রশ্নে -as। (ডিফল্ট হ'ল false, তাই প্রশ্নের সংস্করণকে স্বীকৃত উত্তরে আটকান না)) আপনি কেবল set_query_var('var', $var);নিজের get_template_part()হিসাবে ব্যবহার করতে এবং ব্যবহার করতে পারেন । তারপরে @ ম্যাথসম্যাট উল্লিখিত হিসাবে আপনিও টেমপ্লেটফিলের মধ্যে ডিফল্ট ওয়ার্পড্রেস ভেরিয়েবলগুলি অ্যাক্সেসযোগ্য।
জোনাস লুন্ডম্যান

13

কোডেক্সে একটি ঝরঝরে সমাধান পাওয়া গেছে

সুতরাং আপনি যদি কাস্টম পোস্টের মাধ্যমে লুপিং করেন তবে আপনি এটি করতে পারেন:

foreach ($custom_posts as $custom_post) {
    set_query_var( 'my_post', $custom_post );
    get_template_part( 'content', 'part' );
}

এবং সেই টেমপ্লেটে নিজেই, আপনি একটি স্বয়ংক্রিয়ভাবে পাবেন $my_post


উদাহরণ কোডটি প্রশ্নের উত্তর দিলে এটি সঠিক উত্তর হবে। (পাসিং অপশন, সম্পূর্ণ পোস্ট অ্যারে নয়)
জোনাস লুন্ডম্যান

অন্তর্ভুক্ত টেম্পলেটটিতে অতিরিক্ত তথ্য প্রেরণে এটি সুন্দর করে কাজ করে। এটি wc_get_template_partWooCommerce এর জন্যও কাজ করে যা সন্দেহ নেই যে ডিফল্ট ডাব্লুপিপি প্রসারিত করে।
নাব্রাউন

8

আমি এটির সাথেও সমস্যায় পড়েছি (টেম্পলেট অংশের সাথে কাজ করার জন্য কাস্টম ক্যোয়ারী পাওয়ার চেষ্টা করার সময়)। সংক্ষিপ্ত উত্তরটি হ'ল: না, টেমপ্লেট অংশটি নিয়মিত অন্তর্ভুক্ত করার মতোভাবে স্বয়ংক্রিয়ভাবে কাস্টম ভার্সের উত্তরাধিকারী হয় না।

Get_template_part () এবং Find_template () উভয়ই প্রকৃতপক্ষে ফাইলটি লোড করার জন্য লোড_টেম্পলেট () ফাংশনটি ব্যবহার করে (প্রয়োজনীয়তা ব্যবহার করে)। এই ফাংশনটি নিম্নলিখিত ভার্সকে বিশ্বায়ন করে:

$ পোস্ট, $ পোস্ট, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ মন্তব্য, $ ব্যবহারকারী_আইডি

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

যাইহোক, আমি আপনাকে যে অতিরিক্ত অতিরিক্ত উত্তীর্ণের প্রয়োজন তা বিশ্বায়নের চেষ্টা করব, তারপরে আপনার টেম্পলেট অংশ থেকে সেই গ্লোবালগুলি কল করে।


4

ভবিষ্যতের রেফারেন্সের জন্য কেবল আমার দুটি সেন্ট, কমপক্ষে ওয়ার্ডপ্রেস 3.5 এ একটি পরিবর্তনশীলটি ভেরিয়েবলটি যুক্ত করতে হবে $wp_query->query_vars

আমার গ্লোবালটি _vk_errorsএকটি টেম্পলেট অংশের ভিতরে প্রয়োজন ছিল এবং $wp_query->query_vars['_vk_errors'] = $_vk_errors;কল করার আগে ঠিক তাই করেছিল get_template_part()


2

পরিবর্তনশীল সমস্যা সমাধানের জন্য আমার সাধারণ ফাংশন রয়েছে। ওয়ার্ডপ্রেস get_template_part()ফাংশনে যেমন কাজ করে তেমনি এটি করছে । কেবল অনুলিপি করুন এবং এতে আটকানfunction.php

function getTemplatePart($slug = null, $name = null, array $params = array()) {
    global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;

    do_action("get_template_part_{$slug}", $slug, $name);
    $templates = array();
    if (isset($name))
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    $_template_file = locate_template($templates, false, false);

    if (is_array($wp_query->query_vars)) {
        extract($wp_query->query_vars, EXTR_SKIP);
    }
    extract($params, EXTR_SKIP);

    require($_template_file);
}

টেম্পলেট ব্যবহারের উদাহরণ

$params = array(
    'utm_source' => 'footer'
);
while ($posts->have_posts()) {
    $posts->the_post(); 
    getTemplatePart('content', 'heighlight', $params);
}

content-heighlight.phpনাম $utm_sourceএবং মান সহ অ্যাক্সেসযোগ্য ভেরিয়েবল Infooter


আকর্ষণীয় ফাংশন। সমস্ত গ্লোবাল এবং ক্যোয়ারী ভার্সগুলি কি সাধারণ টেম্পলেট ফাইলগুলিতে সাধারণত অ্যাক্সেসযোগ্য হয়?
খ্রিস্টান

0

আপনি কেবল get_template_part মোড়ানো করতে পারেন, একটি বৈশ্বিক ভেরায় একটি মডেল অবজেক্ট সংরক্ষণ করতে পারেন এবং পরে এটি পরিষ্কার করতে পারেন। আমাদের প্রকল্পগুলিতে আমরা কীভাবে যাচ্ছি তা এখানে:

থিমের functions.php

$model = null; // this is a global variable 
function my_get_template_part($slug, $name = null, $templateModel = null) {
    global $model;
    $model = $templateModel; // set the global var to the provided model object
    get_template_part($slug,$name); 
    $model = null; // clear the global var
}

function get_model() {
    global $model;
    return $model;
}

মূল টেমপ্লেটে ব্যবহার:

<?php my_get_template_part('template-parts/xxxx','xxx',array('test1'))?>

টেমপ্লেট-অংশে প্রদত্ত মডেলটি অ্যাক্সেস করা হচ্ছে:

<?php $model = get_model() ?>

এইভাবে, ডাব্লুপি বিকাশকারীরা পরবর্তীকালে এর প্রয়োগ পরিবর্তন হতে পারে তবে আপনার নিজের ফাংশনে আসল get_template_part ফাংশনটি অনুলিপি করে আটকাতে হবে না।

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