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.


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:



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');

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.