कस्टम पोस्ट प्रकारों के साथ template_include का उपयोग करें


11

मैं अपने प्लगइन निर्देशिका में फ़ाइल पर वापस गिरने से पहले थीम फ़ोल्डर में एक उपयुक्त टेम्पलेट की जांच करना चाहता हूं। यहाँ मेरा कोड है:

add_filter ('template_include', 'sermon_template_include');
समारोह sermon_template_include ($ टेम्पलेट) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           अगर (file_exists (TEMPLATEDIR। '/archive-wpfc_sermon.php'))
              वापसी की तारीख। '/Archive-wpfc_sermon.php';
           dirname (__ FILE__) लौटाएं। '/Views/archive-wpfc_sermon.php';
        अन्य :
           अगर (file_exists (TEMPLATEDIR। '/ w-istsistsistsfswwcc_sermon.php'))
              वापसी की तारीख। '/Single-wpfc_sermon.php';
           dirname (__ FILE__) लौटाएं। '/Views/single-wpfc_sermon.php';
        अगर अंत;
    }
    $ टेम्पलेट वापस करें;
}

समस्या यह है, यह काम नहीं करता है! :-) यह हमेशा मेरे प्लगइन फ़ोल्डर में फ़ाइल उठाता है। कोई विचार कि क्या करना चाहिए? मैंने विविधताओं की कोशिश की है, लेकिन मुझे काम करने के लिए कुछ भी नहीं मिल रहा है! अग्रिम में धन्यवाद! जैक

संपादित करें

अगर यह मौजूद है तो मुझे थीम फ़ोल्डर से संग्रह-wpfc_sermon.php वापस आने की उम्मीद है। हालाँकि, मेरे प्लगइन से फ़ाइल हमेशा वापस आ जाती है। आपकी सहायताके लिए धन्यवाद! यह मेरे उपदेश प्रबंधक प्लगइन से रिपॉजिटरी में उपलब्ध है।


कौन सी थीम टेम्पलेट फ़ाइल वापस आ रही है, जब आप बदले में अपनी प्लगइन टेम्पलेट फ़ाइल को वापस करने की उम्मीद कर रहे हैं?
चिप बेनेट

अगर यह मौजूद है तो मुझे थीम फ़ोल्डर से संग्रह-wpfc_sermon.php वापस आने की उम्मीद है। हालाँकि, मेरे प्लगइन से फ़ाइल हमेशा वापस आ जाती है। आपकी मदद के लिए धन्यवाद @ChipBennett! यह मेरे उपदेश प्रबंधक प्लगइन से रिपॉजिटरी में उपलब्ध है।
जैक

जवाबों:


6

इसलिए, मुझे यकीन नहीं है कि समस्या क्या है, लेकिन आप निम्नलिखित प्रयास कर सकते हैं:

  1. प्लगइन फ़ाइल पथ : के dirname(__FILE__)साथ बदलेंplugin_dir_path( __FILE__ )
  2. थीम फ़ाइल पथ : के TEMPLATEDIRसाथ बदलेंget_stylesheet_directory()

यह संभव है कि समस्या स्थिरांक को सीधे संदर्भित करने से आती है।


0

मुझे यकीन नहीं है कि यह आपके लिए काम करेगा लेकिन यह एक शॉट के लायक है। मैं अपने कस्टम पोस्ट प्रकारों के लिए हर समय इसका उपयोग करता हूं जब उन्हें एक विशेष टेम्पलेट की आवश्यकता होती है।

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

आपको बस इतना करना है कि इस स्क्रिप्ट को अपने फंक्शन्स में जोड़ें। फाइल को अपनी थीम डायरेक्टरी में डालें।

यह एक शॉट के लायक हो सकता है और आपके प्लगइन के साथ संघर्ष का कारण नहीं हो सकता है। हालाँकि मुझे इस पर यकीन नहीं है।

मैं भूल गया ... कार्रवाई को जोड़ने के लिए मत भूलना। :)

add_action("template_redirect", 'my_template_redirect');

धन्यवाद @ निकोल, मैंने जो कोड पोस्ट किया है वह मेरी टेम्पलेट फ़ाइल को कॉल करने के लिए बहुत अच्छा काम करता है। हालाँकि, मैं अपने प्लगइन फ़ोल्डर में एक को लोड करने से पहले उसी नाम की फ़ाइल के लिए वर्तमान थीम फ़ोल्डर को स्कैन करना चाहता हूं।
जैक

@ जेक, तो मूल रूप से यह आपकी फ़ाइल को इस समय थीम डायरेक्टरी में टेम्पलेट से पहले प्लगइन निर्देशिका से बुला रहा है? हम्म यह एक और विचार देना है। : DI एक अच्छी चुनौती प्यार करता हूँ!
निकोल

ये सही है! यह वास्तव में मुझे स्टम्प्ड किया गया था।
जैक

@ जैक, यह एक गूंगा प्रश्न की तरह लग सकता है इसलिए मुझे माफ कर दो अगर यह है। :) आपने जो कोड पोस्ट किया है, वह प्लगइन में है या फ़ंक्शन में है।
निकोल

@Jack उपरोक्त कोड आपकी थीम डायरेक्टरी से टेम्प्लेट फ़ाइल को पुनः प्राप्त करता है। यदि आप 'शामिल' काम करते हैं और यदि नहीं, तो प्लग-इन निर्देशिका से टेम्पलेट को पुनः प्राप्त करने का प्रयास करने के लिए आप एक विवरण का उपयोग कर सकते हैं।
स्टीफन हैरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.