कस्टम पोस्ट प्रकार प्लगइन: मैं टेम्पलेट कहाँ रखूँ?


11

मैं एक कस्टम पोस्ट टाइप प्लगइन लिख रहा हूं। इसका एक हिस्सा मैं शॉर्टकोड के माध्यम से टेम्पलेट पर आउटपुट कर रहा हूं। लेकिन अन्य हिस्सों को एक कस्टम पोस्ट टेम्पलेट की आवश्यकता है, और मुझे पता चला कि सीपीटी के लिए टेम्पलेट पदानुक्रम का उपयोग कैसे करें। लेकिन कस्टम टेम्पलेट थीम में है, और मुझे लगता है कि प्लगइन को आत्म-निहित होना चाहिए, कम से कम शुरू करने के लिए।

तो यहां सबसे अच्छा अभ्यास क्या है? हम CPT प्लगइन में टेम्प्लेट फ़ाइलों को कैसे शामिल करते हैं? क्या आप मुझे विशेष रूप से अच्छे उदाहरणों की ओर संकेत कर सकते हैं कि यह कैसे किया जाता है?

आपकी सहायता के लिए धन्यवाद।



1
सुनिश्चित नहीं है कि यह एक डुप्लिकेट है, लेकिन यह एक व्यक्तिपरक सवाल है। मेरे लिए सबसे अच्छा अभ्यास यह होगा कि मैं थीम को संभालूं। दूसरों के लिए सर्वोत्तम अभ्यास यह होगा कि प्लगइन पूरी तरह से आत्म-निहित हो।
क्रिसगिटेरिटगुई

@JohannesPille मैंने पूछने से पहले खोज की थी। लेकिन लिंक के लिए धन्यवाद। मैं इसे देख रहा हूँ।
कुख्यात वेवमास्टर

1
@chrisguitarguy सहमत हुए। विषय को संभालने देने के साथ मेरा मुद्दा यह है कि यदि हम थीम को स्विच करते हैं, तो हमें प्लगइन को समायोजित करने के लिए कुछ अनुकूलन करना होगा। अन्यथा, हम उस सामान को खो देते हैं जो सीपीटी पार्टी में लाता है।
कुख्यात वेवमास्टर

जवाबों:


8

तो यहां सबसे अच्छा अभ्यास क्या है?

मैं कहूंगा कि थीम को संभालने और आपके प्लगइन के साथ डिफ़ॉल्ट प्रदान करने का एक संयोजन।

आप single_templateटेम्पलेट को स्विच करने के लिए फ़िल्टर का उपयोग कर सकते हैं । अपने कॉलबैक में, देखें कि क्या थीम ने पोस्ट प्रकार के लिए टेम्पलेट प्रदान किया है, यदि यह किया है, तो कुछ भी नहीं करें।

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

मुझे यह तरीका सबसे अच्छा लगता है। इसे "टेम्पलेट टैग्स" (जैसे। ) का एक ध्वनि सेट प्रदान करने के साथ मिलाएं the_content, the_titleजो आपके पोस्ट प्रकार के साथ जाने वाले कस्टम डेटा का समर्थन करता है और आप अंतिम उपयोगकर्ता को कुछ ध्वनि चूक के साथ बहुत अधिक अनुकूलन शक्ति देते हैं। Bbpress इस तरह की बात वास्तव में अच्छी तरह से करता है: इसमें उपयोगकर्ता टेम्पलेट शामिल हैं यदि यह उन्हें ढूंढता है और बहुत सारे टेम्पलेट टैग प्रदान करता है।

वैकल्पिक रूप से, आप the_contentफ़िल्टर के साथ कॉलबैक का उपयोग कर सकते हैं , और सामग्री में केवल सामान बदल सकते हैं।

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}

मैं @toscho से सहमत हूं कि स्वच्छ समाधान नहीं है। लेकिन मुझे श्रेणी टैग का एक सेट पेश करने की अवधारणा पसंद है। मुझे संदेह है कि अंततः मेरे प्लगइन में एक थीम फ़ोल्डर होगा, जिसमें एक नमूना सीपीटी टेम्पलेट होगा, और उपयोगकर्ताओं को उनकी परिस्थितियों के अनुकूल बनाने की सलाह देगा। मुझे the_content फ़िल्टर भी पसंद है, क्योंकि यह उपयोगकर्ता के लेआउट के भीतर मेरी सामग्री को प्लग करता है। मैं दोनों को लागू कर सकता हूं, और उपयोगकर्ता को एक विकल्प टॉगल के साथ किस रास्ते पर जाने की अनुमति दे सकता हूं।
कुख्यात वेब्समास्टर

3

template_includeयदि आपकी पोस्ट प्रकार के लिए अनुरोध है, तो आप अपनी प्लगइन फ़ाइल को हुक कर सकते हैं और वापस कर सकते हैं:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

लेकिन इससे लुक काफी बदल जाएगा। अभी भी कोई साफ समाधान नहीं है।


हाँ, आप सही कह रहे हैं, यह लेआउट, विजेट्स और ऐसे सहित रूप बदल देगा। मेरे स्वाद के लिए बहुत कट्टरपंथी। लेकिन धन्यवाद।
नॉटिवर्मबस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.