Użyj template_include z niestandardowymi typami postów

11

Chcę sprawdzić odpowiedni szablon w folderze motywu, zanim wrócę do pliku w moim katalogu wtyczek. Oto mój kod:

add_filter ('template_include', 'sermon_template_include');
funkcja 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'))
              zwróć TEMPLATEDIR. '/archive-wpfc_sermon.php';
           zwróć nazwę katalogu (__ PLIK__). '/views/archive-wpfc_sermon.php';
        inaczej:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              zwróć TEMPLATEDIR. '/single-wpfc_sermon.php';
           zwróć nazwę katalogu (__ PLIK__). '/views/single-wpfc_sermon.php';
        endif;
    }
    zwróć szablon $;
}

Problem w tym, że to nie działa! :-) Zawsze wybiera plik z mojego folderu wtyczek. Masz pomysł, co robić? Próbowałem wiele odmian, ale wydaje mi się, że nic nie działa! Z góry dziękuję! Jacek

EDYTOWAĆ

Oczekuję, że plik archive-wpfc_sermon.php zostanie zwrócony z folderu motywu, jeśli istnieje. Jednak plik z mojej wtyczki zawsze jest zwracany. Dzięki za pomoc! Pochodzi z mojej wtyczki Sermon Manager dostępnej w repozytorium.

Jacek
źródło
Który plik szablonu motywu jest zwracany, jeśli zamiast tego oczekujesz, że plik szablonu wtyczki zostanie zwrócony?
Chip Bennett
Oczekuję, że plik archive-wpfc_sermon.php zostanie zwrócony z folderu motywu, jeśli istnieje. Jednak plik z mojej wtyczki zawsze jest zwracany. Dzięki za pomoc @ChipBennett! Pochodzi z mojej wtyczki Sermon Manager dostępnej w repozytorium.
Jack

Odpowiedzi:

6

Nie jestem więc pewien, co dokładnie powoduje problem, ale możesz spróbować wykonać następujące czynności:

  1. Wtyczka ścieżkę zamienić dirname(__FILE__)zplugin_dir_path( __FILE__ )
  2. Ścieżka pliku motyw zamienić TEMPLATEDIRzget_stylesheet_directory()

Jest możliwe , że problem wynika z odwoływania stałych bezpośrednio.

Chip Bennett
źródło
0

Nie jestem pewien, czy to zadziała, ale warto spróbować. Używam tego cały czas dla moich niestandardowych typów postów, gdy wymagają one specjalnego szablonu.

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

Wszystko, co musisz zrobić, to dodać ten skrypt do pliku functions.php i umieścić plik szablonu w katalogu motywów.

Może to być warte zastrzyku i nie może powodować konfliktu z wtyczką. Nie jestem jednak tego pewien.

Zapomniałem ... nie zapomnij dodać akcji. :)

add_action("template_redirect", 'my_template_redirect');
Nicole
źródło
Dzięki @Nicole, kod, który opublikowałem, świetnie nadaje się do wywołania mojego pliku szablonu. Chcę jednak przeskanować bieżący folder motywów w poszukiwaniu pliku o tej samej nazwie przed załadowaniem go do mojego folderu wtyczek.
Jack
@Jack, więc w zasadzie to wywoływanie pliku z katalogu wtyczek przed szablonem w katalogu motywów w tej chwili? hmm, będę musiał przemyśleć jeszcze raz. : DI kocham dobre wyzwanie!
Nicole
Zgadza się! Naprawdę mnie zaskoczył.
Jack
@ Jack, To może brzmieć jak głupie pytanie, więc wybacz mi, jeśli tak jest. :) Kod, który opublikowałeś, znajduje się we wtyczce lub w pliku functions.php?
Nicole
@Jack Powyższy kod pobiera plik szablonu z katalogu motywów. Możesz użyć instrukcji if, aby sprawdzić, czy „dołącz” zadziałało, a jeśli nie, spróbuj pobrać szablon z katalogu wtyczki.
Stephen Harris