Verwenden Sie template_include mit benutzerdefinierten Beitragstypen

11

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

add_filter ('template_include', 'sermon_template_include');
Funktion sermon_template_include ($ template) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              TEMPLATEDIR zurückgeben. '/archive-wpfc_sermon.php';
           Rückgabeverzeichnis (__ FILE__). '/views/archive-wpfc_sermon.php';
        sonst:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              TEMPLATEDIR zurückgeben. '/single-wpfc_sermon.php';
           Rückgabeverzeichnis (__ FILE__). '/views/single-wpfc_sermon.php';
        endif;
    }}
    $ template zurückgeben;
}}

Das Problem ist, es funktioniert nicht! :-) Es wählt immer die Datei in meinem Plugin-Ordner aus. Irgendeine Idee was zu tun ist? Ich habe viele Variationen ausprobiert, aber ich kann anscheinend nichts zum Laufen bringen! Danke im Voraus! Jack

BEARBEITEN

Ich erwarte, dass die Datei archive-wpfc_sermon.php aus dem Themenordner zurückgegeben wird, falls vorhanden. Die Datei von meinem Plugin wird jedoch immer zurückgegeben. Danke für Ihre Hilfe! Dies ist von meinem Sermon Manager-Plugin, das im Repository verfügbar ist.

Jack
quelle
Welche Theme-Vorlagendatei wird zurückgegeben, wenn Sie stattdessen erwarten, dass Ihre Plugin-Vorlagendatei zurückgegeben wird?
Chip Bennett
Ich erwarte, dass die Datei archive-wpfc_sermon.php aus dem Themenordner zurückgegeben wird, falls vorhanden. Die Datei von meinem Plugin wird jedoch immer zurückgegeben. Vielen Dank für Ihre Hilfe @ChipBennett! Dies ist von meinem Sermon Manager-Plugin, das im Repository verfügbar ist.
Jack

Antworten:

6

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

  1. Plugin-Dateipfad : Ersetzen dirname(__FILE__)durchplugin_dir_path( __FILE__ )
  2. Pfad der Themendatei : Ersetzen TEMPLATEDIRdurchget_stylesheet_directory()

Es ist möglich , dass das Problem herkommt direkt die Konstanten verweisen.

Chip Bennett
quelle
0

Ich bin nicht sicher, ob dies für Sie funktionieren wird, aber es ist einen Versuch wert. Ich verwende dies ständig für meine benutzerdefinierten Beitragstypen, wenn sie eine spezielle Vorlage erfordern.

// 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 Ihre Datei functions.php einzufügen und die Vorlagendatei in Ihrem Themenverzeichnis abzulegen.

Dies könnte einen Versuch wert sein und möglicherweise keinen Konflikt mit Ihrem Plugin verursachen. Da bin ich mir jedoch nicht sicher.

Ich habe vergessen ... vergiss nicht, die Aktion hinzuzufügen. :) :)

add_action("template_redirect", 'my_template_redirect');
Nicole
quelle
Dank @Nicole funktioniert der Code, den ich gepostet habe, hervorragend, um meine Vorlagendatei aufzurufen. Ich möchte jedoch den aktuellen Themenordner nach einer gleichnamigen Datei durchsuchen, bevor ich die Datei in meinen Plugin-Ordner lade.
Jack
@Jack, also ruft es im Grunde genommen deine Datei aus dem Plugin-Verzeichnis vor der Vorlage im Theme-Verzeichnis auf? hmm muss noch darüber nachdenken. : DI liebe eine gute Herausforderung!
Nicole
Das ist richtig! Es hat mich wirklich verblüfft.
Jack
@ Jack, das klingt vielleicht nach einer dummen Frage, also vergib mir, wenn es so ist. :) Der Code, den Sie gepostet haben, ist der im Plugin oder in der Datei functions.php?
Nicole
@Jack Der obige Code ruft die Vorlagendatei aus Ihrem Themenverzeichnis ab. Sie können eine if-Anweisung verwenden, um zu überprüfen, ob das 'include' funktioniert, und wenn nicht, versuchen Sie, die Vorlage aus dem Plug-in-Verzeichnis abzurufen.
Stephen Harris