প্লাগইনগুলি দিয়ে কাস্টম পৃষ্ঠার টেম্পলেট তৈরি করবেন?


উত্তর:


73

get_page_template()page_templateফিল্টার মাধ্যমে ওভাররাইড করা যেতে পারে । যদি আপনার প্লাগইনটি টেমপ্লেটগুলির মধ্যে ফাইল হিসাবে একটি ডিরেক্টরি হয় তবে এই ফাইলগুলির নাম পাস করার বিষয়টি কেবল। আপনি যদি তাদের "ফ্লাইতে" তৈরি করতে চান (এডমিন অঞ্চলে এগুলি সম্পাদনা করুন এবং এটি ডাটাবেসে সংরক্ষণ করুন?), আপনি এগুলি ক্যাশে ডিরেক্টরিতে লিখতে এবং তাদের উল্লেখ করতে, বা template_redirectকিছু ক্রেজি eval()স্টাফ তৈরি করতে চাইতে পারেন ।

কোনও নির্দিষ্ট মাপদণ্ড যদি সত্য হয় তবে একই প্লাগইন ডিরেক্টরিতে কোনও ফাইলকে "পুনর্নির্দেশ" করে এমন একটি প্লাগইনের সাধারণ উদাহরণ:

add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
    if ( is_page( 'my-custom-page-slug' ) ) {
        $page_template = dirname( __FILE__ ) . '/custom-page-template.php';
    }
    return $page_template;
}

আরে জান, কাস্টম পৃষ্ঠার টেমপ্লেট হিসাবে কোনও প্লাগইন ফাইল কীভাবে পাস করবেন তার কোনও উদাহরণ কোড আপনার কাছে রয়েছে?
jnthnclrk

@trnsfrmr: এটি সত্যিই সহজ, আমি আমার উত্তরের একটি সাধারণ উদাহরণ যুক্ত করেছি।
জান ফ্যাব্রি

10
নোট করুন যে এটি পরবর্তী সংস্করণগুলিতে "টেম্পলেট_সামগ্রী" ফিল্টার দ্বারা কম বা কম প্রতিস্থাপন করা হয়েছে (3.1+)।
ইনিগোগার

পারফেক্ট !!!, আপনি আমার সময় বাঁচিয়েছেন @ জনফ্যাব্রি
কিশান চৌহান

@ ফায়ারফয়েডুডের বক্তব্য অনুসারে, এটি জেনেরিক সমাধান নয়। এটি এমন একটি কাজ যা পৃষ্ঠা স্লাগকে হার্ড-কোড করে।
মাউরো কোলেলা

22

ওভাররাইডিং get_page_template()কেবল একটি দ্রুত হ্যাক। এটি অ্যাডমিন স্ক্রিন থেকে টেমপ্লেটটি নির্বাচন করার অনুমতি দেয় না এবং পৃষ্ঠা স্লাগটি প্লাগইনে হার্ড-কোডড থাকে যাতে ব্যবহারকারীর টেম্পলেটটি কোথা থেকে আসছে তা জানার কোনও উপায় নেই।

পছন্দসই সমাধানটি হ'ল এই টিউটোরিয়ালটি অনুসরণ করা যা আপনাকে প্লাগ-ইন থেকে ব্যাক-এন্ডে একটি পৃষ্ঠা টেম্পলেট নিবন্ধভুক্ত করতে দেয়। তারপরে এটি অন্য যে কোনও টেম্পলেটগুলির মতো কাজ করে।

 /*
 * Initializes the plugin by setting filters and administration functions.
 */
private function __construct() {
        $this->templates = array();

        // Add a filter to the attributes metabox to inject template into the cache.
        add_filter('page_attributes_dropdown_pages_args',
            array( $this, 'register_project_templates' ) 
        );

        // Add a filter to the save post to inject out template into the page cache
        add_filter('wp_insert_post_data', 
            array( $this, 'register_project_templates' ) 
        );

        // Add a filter to the template include to determine if the page has our 
        // template assigned and return it's path
        add_filter('template_include', 
            array( $this, 'view_project_template') 
        );

        // Add your templates to this array.
        $this->templates = array(
                'goodtobebad-template.php'     => 'It\'s Good to Be Bad',
        );
}

আপনার উত্তরে লিংক থেকে প্রাসঙ্গিক কোডটি পোস্ট করতে পারলে খুব ভাল ( এবং পছন্দসই ) হতে পারে , অন্যথায় এটি একটি স্ফীত মন্তব্য ছাড়া আর কিছু নয় :-)
পিটার গুসেন

টিউটোরিয়ালটি আসলে এই পদ্ধতির প্রবর্তক হিসাবে টম ম্যাকফারলিনের উদাহরণকে কৃতিত্ব দেয়।
ফায়ারডুড

7

হ্যা এটা সম্ভব. এই উদাহরণটি আমি খুব সহায়ক বলে মনে করেছি।

আমার মাথায় আসা আরও একটি পন্থা টেমপ্লেট ফাইলটি থিম তৈরি করতে ডাব্লুপি ফাইল সিস্টেম এপিআই ব্যবহার করছে । আমি নিশ্চিত যে এটি নেওয়া সেরা পন্থা, তবে আমি নিশ্চিত যে এটি কার্যকর!


লিঙ্কযুক্ত উদাহরণ প্লাগইন এমনকি বেশ ভাল নথিভুক্ত। আমি এটা পছন্দ করি। :)
অরভিদ

0

পূর্ববর্তী উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করছে না। এখানে একটি যেখানে আপনি ওয়ার্ডপ্রেস অ্যাডমিনে আপনার টেম্পলেট চয়ন করতে পারেন। এটি কেবল আপনার মূল পিএইচপি প্লাগইন ফাইলটিতে রেখে template-configurator.phpআপনার টেম্পলেটটির নাম পরিবর্তন করুন

//Load template from specific page
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template ){

    if ( get_page_template_slug() == 'template-configurator.php' ) {
        $page_template = dirname( __FILE__ ) . '/template-configurator.php';
    }
    return $page_template;
}

/**
 * Add "Custom" template to page attirbute template section.
 */
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {

    // Add custom template named template-custom.php to select dropdown 
    $post_templates['template-configurator.php'] = __('Configurator');

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