Get_template_part () এর ফলাফলটি কী ওভাররাইড করা সম্ভব?


11

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

লুপে, মূল থিমের ইনডেক্স.ফ্প টেম্পলেটটি ব্যবহার করে: get_template_part( 'content' );

যা আনতে হবে content.php , আমি এটা মত আরো আচরণ আছে অপেক্ষায় থাকবো get_template_part( 'content', get_post_format() );বা এই ধরনের বিভিন্ন টেমপ্লেট আনতে অনুক্রমে অনুরূপ সামগ্রী-aside.php , ইত্যাদি, একটি তৈরি ছাড়া index.php শিশু থিমে ওপর দিয়েই লিখতে একটি একক লাইন পরিবর্তনের জন্য পিতামাতার।

get_template_part() গঠিত:

function get_template_part( $slug, $name = null ) {

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

    $templates[] = "{$slug}.php";
    locate_template($templates, true, false);
}

সুতরাং একটি ক্রিয়া উপলব্ধ আছে, আমার ক্ষেত্রে বলা হয় get_template_part_content

আমি এই জাতীয় কিছু দিয়ে ক্রিয়াটি ঘটাতে পারি:

add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );

function child_post_styles ( $slug, $name ) {
    if( false == $name ){
        $name = get_post_format();
        $templates = array();
        if ( '' !== $name )
            $templates[] = "{$slug}-{$name}.php";

        $templates[] = "{$slug}.php";
        locate_template($templates, true, false);
    }
}

এটি স্পষ্টতই পোস্ট সদৃশতার ফলস্বরূপ, আমার হুকড ফাংশন থেকে একটি যা পছন্দসই টেমপ্লেট প্রদর্শন করতে পারে এবং অন্যটি স্বাভাবিক locate_templateকল থেকেget_template_part()

সদৃশ ছাড়াই, বা পৃষ্ঠার রেন্ডারটি শেষ না করেই ডুপ্লিকেশন ছাড়াই এটি সম্পাদনের কোনও উপায় খুঁজে পেতে আমার আমার সমস্যা হচ্ছে যেমন একটি breakবাexit


পরীক্ষা করে দেখুন এই পোস্টে
পিটার Goosen

3
টেমপ্লেট উত্তরাধিকার ছাড়াই দু: খিত জীবনে আপনাকে স্বাগতম। :)
রাস্তার

উত্তর:


3

এটি করার কোনও হুক নেই। চাইল্ড থিমে সূচি.এফপি অনুলিপি করুন এবং একক লাইন পরিবর্তন করুন। এছাড়াও, পিতামাতার থিমের লেখককে বলুন যে নমনীয়তার জন্য তাদের থিমে একই পরিবর্তন করা উচিত।


এটি এখন মিথ্যা, এখানে @ টি-টুডুয়া উত্তর দেখুন
ইভান ক্যাসেলেলানোস

তার উত্তরটি কোনও সমাধান নয়, কারণ টেম্পলেট অংশটি এখনও লোড হয় এবং এর মধ্যে রয়েছে। অ্যাকশন হুক এটিকে ওভাররাইড করতে পারে না।
অটো

সত্য, তবে আপনি ob_startএটির ভিতরে ব্যবহার করতে পারেন এবং এর ob_endকিছুটা পরে হুক যাতে এটি কার্যকর হয় তবে কখনও প্রতিধ্বনিত হয় না, যা সাধারণত যথেষ্ট ভাল। অথবা আপনি পিএইচপি জোর করে শেষ করতে প্রস্থান () ব্যবহার করতে পারেন (আপনি ম্যানুয়ালি এখনও সমস্ত কিছু অন্তর্ভুক্ত করার পরে: পাদলেখ ইত্যাদি)
ইভান ক্যাসেলেলানোস

এবং এটি এখনও কোনও সমাধান নয়। আউটপুট দমন করা ওভাররাইডিং জিনিসগুলির মতো নয়।
অটো

প্রস্থান আউটপুট দমন করে না; এটি কার্যকরভাবে সেই সময়ে কার্যকর করা বন্ধ করে দেয়।
ইভান ক্যাসেলেলানোস

6

আমি মনে করি আপনি যেভাবে অর্জন করতে চান এটি ঠিক সম্ভব নয়। টেমপ্লেট ফাইলের নাম পরিবর্তন করতে কোনও ফিল্টার না পেয়ে সত্যিই বিরক্তিকর :(

যদিও আমি এটি সম্পর্কে একটি workaround আছে। content.phpতুলনার জন্য ব্যবহার করা যাক ।

// content.php file 
$format = get_post_format();
if( '' != $format ){
    get_template_part( 'content-'. $format );
}
else{
    get_template_part( 'content-default' );
}

আমি get_template_partফাংশনটির দ্বিতীয় তর্কটি ব্যবহার করি নি , বরং content.phpফাইল না থাকলে ফাইলটিতে ইনফিনিটিভ কল এড়াতে আমি প্রথম যুক্তিতে প্রত্যয়টি পাস করেছি 'content-'. $format


আমি মনে করি এটি এটি করার একটি ভাল উপায়। কেন এটি গৃহীত হয়নি তা নিশ্চিত নয় :)
আনহ ট্রান

খ্যাতি বিষয়গুলি, হতে পারে :)
শাজাদ

দুঃখিত @ শাহজাদ, আমি আপনার জবাবটি একটি উজ্জীবিত হয়েছি যদিও এটি খুব চালাক :) :) আমি যদি দু'জনকে গ্রহণ করতে পারি তবে আমি করতাম।
টমহরিগান

3

ঠিক আছে, সমাধান আছে :

add_action('init', function(){ remove_all_actions('get_template_part_content'); });
add_action('get_template_part_content', 'yourFunc', 99, 2 );
function yourFunc ( $slug, $name ) {

    .........any codes here.............
    if ($name == 'header'){
       //but this will be executed before loading template... At this moment, Wordpress doesnt support any hooks for before/after LOAD_TEMPLATE...
    }
}

তবে সাবধানতার সাথে চিন্তা করুন, কোন হুকের মধ্যে আপনাকে সেই ক্রিয়াটি সন্নিবেশ করা উচিত ... ম্যানুয়ালি লোকেশন, ব্যবহার, অর্থাৎ পেতে locate_template('content-header.php', false);


0

আপনি যদি কনটেন্ট-এগ্রাইড.এফপি নামে একটি ফাইল টেনে আনতে চান তবে আপনি ফাংশনটি এভাবে কল করেন:

get_template_part( 'content', 'aside' );

দ্বিতীয় প্যারামিটারটি হাইফেনের পরে ফাইলারের নাম। যদি আপনার ফাইলটি একটি উপ-ডিরেক্টরিতে থাকে (টেমপ্লেট / বিষয়বস্তু-সাইড-পিএইচপি):

get_template_part( 'templates/content', 'aside' );

আপনি কি এটি করতে চান?


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