प्लगइन्स के साथ कस्टम पेज टेम्प्लेट बनाएं?


जवाबों:


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+) में "template_include" फिल्टर द्वारा प्रतिस्थापित किया गया है।
इनिगोस्डर

परफेक्ट !!!, आपने मेरा समय @JanFabry
किशन चौहान

जैसा कि @fireydude द्वारा कहा गया है, यह एक सामान्य समाधान नहीं है। यह वर्कअराउंड है कि पेज स्लग को हार्ड-कोड करता है।
मौरो कोलेला

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

हाँ यह संभव है। मुझे यह उदाहरण प्लगइन बहुत मददगार लगा।

एक और दृष्टिकोण जो मेरे सिर में आया है वह थीम के लिए टेम्पलेट फ़ाइल बनाने के लिए WP फाइलसिस्टम एपीआई का उपयोग कर रहा है । मुझे यकीन नहीं है कि यह लेने के लिए सबसे अच्छा तरीका है, लेकिन मुझे यकीन है कि यह काम करेगा!


जुड़ा उदाहरण प्लगइन बहुत अच्छी तरह से प्रलेखित है। मुझे वह पसंद है। :)
अरविद

0

पिछले उत्तरों में से कोई भी मेरा काम नहीं कर रहा था। यहां आप Wordpress व्यवस्थापक में अपना टेम्पलेट चुन सकते हैं। बस इसे अपने मुख्य php प्लगइन फाइल में 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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.