Özel gönderi türleriyle template_include kullanma


11

Eklenti dizinimdeki dosyaya geri dönmeden önce tema klasöründe uygun bir şablon olup olmadığını kontrol etmek istiyorum. İşte benim kod:

add_filter ('template_include', 'sermon_template_include');
sermon_template_include işlevi ($ template) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              dönüş TEMPLATEDIR. '/Archive-wpfc_sermon.php';
           dönüş adı (__ FILE__). '/Views/archive-wpfc_sermon.php';
        Başka :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              dönüş TEMPLATEDIR. '/Single-wpfc_sermon.php';
           dönüş adı (__ FILE__). '/Views/single-wpfc_sermon.php';
        endif;
    }
    $ şablonunu döndür;
}

Sorun şu ki, işe yaramıyor! :-) Her zaman benim eklenti klasörümdeki dosyayı seçer. ne herhangi bir fikrin var mı? Çok fazla varyasyon denedim ama çalışmak için bir şey elde edemiyorum! Şimdiden teşekkürler! kriko

DÜZENLE

Arşiv-wpfc_sermon.php varsa tema klasöründen döndürülmesini bekliyorum. Ancak, eklentimdeki dosya her zaman döndürülür. Yardım ettiğin için teşekkür ederim! Bu, depoda bulunan Sermon Manager eklentimden.


Bunun yerine, Eklenti şablon dosyanızın döndürülmesini beklediğinizde, hangi Tema şablonu dosyası döndürülüyor?
Chip Bennett

Arşiv-wpfc_sermon.php varsa tema klasöründen döndürülmesini bekliyorum. Ancak, eklentimdeki dosya her zaman döndürülür. Yardımınız için teşekkürler @ChipBennett! Bu, depoda bulunan Sermon Manager eklentimden.
Jack

Yanıtlar:



0

Bunun sizin için işe yarayıp yaramayacağından emin değilim ama denemeye değer. Özel bir şablon gerektirdiklerinde bunu özel yazı türlerim için her zaman kullanıyorum.

// 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;
      }
    }
}

Tek yapmanız gereken bu komut dosyasını function.php dosyanıza eklemek ve şablon dosyasını tema dizininize koymaktır.

Bu bir denemeye değer olabilir ve eklentinizle çakışmaya neden olmayabilir. Ancak bundan emin değilim.

Unuttum ... eylemi eklemeyi unutma. :)

add_action("template_redirect", 'my_template_redirect');

Teşekkürler @Nicole, gönderdiğim kod şablon dosyamı aramak için harika çalışıyor. Ancak, eklenti klasörüme yüklemeden önce geçerli tema klasörünü aynı adlı bir dosya için taramak istiyorum.
Jack

@Jack, Yani temelde şu anda tema dizinindeki şablondan önce dosyanızı eklenti dizininden çağırıyor? hmm bunu bir daha düşünmek zorunda kalacak. : DI iyi bir meydan okumayı seviyorum!
Nicole

Doğru! Beni gerçekten çok üzdü.
Jack

@Jack, Bu aptalca bir soru gibi gelebilir, eğer öyleyse beni affet. :) Gönderdiğiniz kod eklentide mi yoksa function.php dosyasında mı?
Nicole

@Jack Yukarıdaki kod, şablon dosyasını tema dizininizden alır. 'İnclude' öğesinin çalışıp çalışmadığını kontrol etmek için bir if ifadesi kullanabilirsiniz ve eğer değilse, şablonu eklenti dizininden almaya çalışın.
Stephen Harris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.