কাস্টম পোস্ট প্রকার এবং টেমপ্লেট_ড্রাইরেক্ট


9

আমার দুটি কাস্টম পোস্ট প্রকার রয়েছে (যেমন post_type_1 এবং post_type_2) যা আমি তাদের প্রদর্শন পরিচালনা করতে স্বতন্ত্র টেম্পলেটগুলিতে (একক-পোস্ট_টাইপ_1.php এবং একক-পোস্ট_ টাইপ_2. php) পুনর্নির্দেশ করতে চাই। আমি থিম ফোল্ডারে ডিসপ্লে টেম্পলেটগুলি রাখতে চাই না কারণ সেগুলি তাদের নিজ নিজ প্লাগইন ফোল্ডারে স্বয়ংসম্পূর্ণ করতে চাই।

আমি তাদের প্রত্যেককে কীভাবে অন্যটিকে প্রভাবিত না করে একটি টেম্পলেট_ড্রেইড হুক রেজিস্টার করতে পারি? বা আমার কি অন্য কোনও কৌশল ব্যবহার করা উচিত?

বর্তমানে, আমি এটি প্লাগিন 1 এ করছি:

add_action( 'template_redirect', 'template_redirect_1' );
function template_redirect_1() {
    global $wp_query;
    global $wp;

    if ( $wp_query->query_vars['post_type'] === 'post_type_1' ) {

        if ( have_posts() )
        {
            include( PATH_TO_PLUGIN_1 . '/views/single-post_type_1.php' );
            die();
        }
        else
        {
            $wp_query->is_404 = true;
        }

    }
}

এবং এটি প্লাগিন 2 এ:

add_action( 'template_redirect', 'template_redirect_2' );
function template_redirect_2() {
    global $wp_query;
    global $wp;

    if ( $wp_query->query_vars['post_type'] === 'post_type_2' ) {

        if ( have_posts() )
        {
            include( PATH_TO_PLUGIN_2 . '/views/single-post_type_2.php' );
            die();
        }
        else
        {
            $wp_query->is_404 = true;
        }

    }
}

আমি একবার প্লাগইন 2 এর টেমপ্লেট_ড্রাইরেটড হুক নিবন্ধিত করলে, প্লাগইন 1 এর আর কাজ হয় না।

আমি কিছু অনুপস্থিত করছি?

এই কাজ করতে সবচেয়ে ভালো উপায় কি?

উত্তর:


13

আপনি এটির জন্য টেমপ্লেট_সামান্য ফিল্টার ব্যবহার করা উচিত:

add_filter('template_include', 'wpse_44239_template_include', 1, 1);
function wpse_44239_template_include($template){
    global $wp_query;
    //Do your processing here and define $template as the full path to your alt template.
    return $template;
}

template_redirectরেন্ডার টেম্পলেট আউটপুট জন্য শিরোনাম প্রেরণের আগে সরাসরি অ্যাকশন বলা হয়। এটি 404 পুনঃনির্দেশ ইত্যাদি করতে সুবিধাজনক হুক ... তবে অন্যান্য টেম্পলেট পাথগুলি অন্তর্ভুক্ত করার জন্য ব্যবহার করা উচিত নয় কারণ ওয়ার্ডপ্রেস সহজাতভাবে এই 'টেমপ্লেট_নোক্লিন' ফিল্টারটি করে।

template_includeএবং single_templateহুকগুলি কেবল সামগ্রীতে রেন্ডারিংয়ের জন্য ব্যবহৃত টেম্পলেটটির পথ নিয়ে কাজ করে। এটি একটি টেম্পলেট পাথ সামঞ্জস্য করার উপযুক্ত জায়গা।

@ শিপবনেট দ্বারা মন্তব্য থেকে আপডেট:

single_template3.4 হিসাবে সরানো হয়েছে পরিবর্তে {posttype} _templet ব্যবহার করুন।


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

@ ওভাবে আমি আমার উত্তর আপডেট করেছি। আশাকরি এটা সাহায্য করবে.
ব্রায়ান ফেগটার

সুতরাং, একক_প্লেষক সম্পর্কে কি? এই লিঙ্কটি ( কোডেক্স.ওয়ার্ডপ্রেস.আর / প্লাগইন_এপিআই / ফিল্টার_সামগ্রী / সিংহ_প্লেট ) বলছে এটি যখন কোনও একক টেমপ্লেট বলা হয় তখন কোনও পোস্ট বা পৃষ্ঠার জন্য টেমপ্লেট সামঞ্জস্য করতে এটি ব্যবহার করা যেতে পারে। এটিই আমি করার চেষ্টা করছি। যাই হোক না কেন, টেমপ্লেট_ইনক্লাইড বা একক_প্লেষক ফিল্টারগুলি ব্যবহার করে এবং একই জিনিসটি সম্পাদন করতে দেখা যায়।
অ্যান্ডলি

1
একক_প্লেষকটি শর্তাধীন বলা বাদে একইভাবে কাজ করে। এটি পুরো সাইটে হাতুড়ি ফিল্টার ব্যবহার না করে পাথের পরিবর্তনগুলি বিচ্ছিন্ন করতে সহায়তা করে।
ব্রায়ান ফেগটার

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