Verwenden Sie template_include mit benutzerdefinierten Post-Typen

Ich möchte im Theme-Ordner nach einer passenden Vorlage suchen, bevor ich auf die Datei in meinem Plugin-Verzeichnis zurückkomme. Hier ist mein Code:

  add_filter ('template_include', 'sermon_template_include');
 function predmon_template_include ($ template) {
     if (get_query_var ('post_type') == 'wpfc_sermon') {
         if (is_archive () || is_search ()):
            if (Datei_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
               Rückkehr TEMPLATEDIR.  '/archive-wpfc_sermon.php';
            return dirname (__DATEI__).  '/views/archive-wpfc_sermon.php';
         sonst:
            if (Datei_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
               Rückkehr TEMPLATEDIR.  '/single-wpfc_sermon.php';
            return dirname (__DATEI__).  '/views/single-wpfc_sermon.php';
         endif;
     }
     return $ Vorlage;
 }

Problem ist, es funktioniert nicht! 🙂 Es wählt immer die Datei in meinem Plugin-Ordner. Irgendeine Idee, was zu tun ist? Ich habe viele Varianten ausprobiert, aber ich kann nichts zur Arbeit bringen! Danke im Voraus! Jack

BEARBEITEN

Ich erwarte, dass die Archiv-wpfc_sermon.php aus dem Thema Ordner zurückgegeben wird, wenn es existiert. Die Datei von meinem Plugin wird jedoch immer zurückgegeben. Danke für Ihre Hilfe! Dies ist von meinem Sermon Manager Plugin im Repository verfügbar.

Solutions Collecting From Web of "Verwenden Sie template_include mit benutzerdefinierten Post-Typen"

Also, ich bin mir nicht sicher, was genau das Problem verursacht, aber Sie könnten Folgendes versuchen:

  1. Plugin-Dateipfad : Ersetzen von dirname(__FILE__) durch plugin_dir_path( __FILE__ )
  2. Pfad der TEMPLATEDIR : TEMPLATEDIR durch get_stylesheet_directory()

Es ist möglich, dass das Problem dadurch entsteht, dass die Konstanten direkt referenziert werden.

Ich bin mir nicht sicher, ob das für Sie funktioniert, aber es ist einen Versuch wert. Ich benutze dies die ganze Zeit für meine benutzerdefinierten Post-Typen, wenn sie eine spezielle Vorlage benötigen.

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

Alles, was Sie tun müssen, ist dieses Skript in Ihrer functions.php-Datei hinzuzufügen und die Vorlagendatei in Ihr Themenverzeichnis zu legen.

Dies könnte einen Versuch wert sein und keinen Konflikt mit Ihrem Plugin verursachen. Aber ich bin mir da nicht sicher.

Ich habe vergessen … vergiss nicht, die Aktion hinzuzufügen. 🙂

 add_action("template_redirect", 'my_template_redirect');