Wtyczka niestandardowego typu postu: Gdzie umieścić szablon?

11

Piszę niestandardową wtyczkę typu post. Część tego wysyłam do szablonu za pomocą skrótów. Ale inne części potrzebują niestandardowego szablonu postu i wymyśliłem, jak używać hierarchii szablonów dla CPT. Ale szablon niestandardowy znajduje się w motywie i myślę, że wtyczka powinna być samodzielna, przynajmniej na początek.

Więc jaka jest najlepsza praktyka tutaj? Jak zawrzeć pliki szablonów we wtyczce CPT? Czy możesz wskazać mi szczególnie dobre przykłady tego, jak to się robi?

Dzięki za pomoc.

NotoriousWebmaster
źródło
1
Nie jestem pewien, czy to duplikat, ale to subiektywne pytanie. Najlepszą praktyką dla mnie byłoby pozwolić temu tematowi sobie z tym poradzić. Najlepszą praktyką dla innych byłoby uczynienie wtyczki całkowicie samodzielną.
chrisguitarguy
@JohannesPille Szukałem przed pytaniem. Ale dzięki za link. Zajmę się tym.
NotoriousWebmaster
1
@chrisguitarguy Zgoda. Mój problem z obsługą motywu polega na tym, że jeśli zmienimy motywy, musimy wprowadzić pewne dostosowania, aby dostosować wtyczkę. W przeciwnym razie tracimy rzeczy, które CPT przynosi na imprezę.
NotoriousWebmaster

Odpowiedzi:

8

Więc jaka jest najlepsza praktyka tutaj?

Powiedziałbym, że jest to kombinacja pozwalająca na obsługę tego motywu i dostarczenie domyślnej wtyczki.

Możesz użyć single_templatefiltru, aby zmienić szablon. W swoim wywołaniu zwrotnym sprawdź, czy motyw zawiera szablon typu postu, jeśli tak, nie rób nic.

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

Najbardziej podoba mi się ta metoda. Połącz to z dostarczeniem dźwiękowego zestawu „tagów szablonów” (np. the_content, the_title), Które obsługują dowolne niestandardowe dane, które pasują do twojego typu postu, i dajesz użytkownikowi końcowemu wiele możliwości dostosowywania wraz z pewnymi domyślnymi ustawieniami dźwięku. Bbpress robi takie rzeczy naprawdę dobrze: zawiera szablony użytkownika, jeśli je znajdzie i zapewnia wiele tagów szablonów.

Alternatywnie możesz użyć wywołania zwrotnego z the_contentfiltrem i po prostu zmienić rzeczy w samej treści.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}
chrisguitarguy
źródło
Zgadzam się z @toscho, że nie ma czystego rozwiązania. Ale podoba mi się koncepcja oferowania zestawu tagów kategorii. Podejrzewam, że ostatecznie będę mieć folder motywów w mojej wtyczce z przykładowym szablonem CPT i zalecam użytkownikom dostosowanie go do ich okoliczności. Podoba mi się również filtr the_content, ponieważ powoduje to wtłaczanie mojej zawartości do układu użytkownika. Mogę zaimplementować oba, i pozwolić użytkownikowi wybrać, którą drogą wybrać opcję przełączania.
NotoriousWebmaster
3

Możesz podłączyć template_includei zwrócić plik wtyczki, jeśli żądanie dotyczy Twojego typu posta:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

Ale to drastycznie zmieni wygląd. Nadal nie ma czystego rozwiązania.

fuxia
źródło
Tak, masz rację, to zmieniłoby wygląd, w tym układ, widżety i tym podobne. Zbyt radykalny jak na mój gust. Ale dzięki.
NotoriousWebmaster