Piszę wtyczkę, która tworzy niestandardowy typ postu o nazwie „my_plugin_lesson”:
$args = array (
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'lessons', 'with_front' => false)
);
register_post_type ('my_plugin_lesson', $args);
Niestandardowy typ postu ma archiwum, a adres URL archiwum to:
http://example.com/lessons
Chcę dostosować wygląd tego archiwum; Chcę wyświetlić listę postów w formacie tabeli, a nie w standardowym archiwum postów na blogu WordPress. Rozumiem, że niestandardowy szablon archiwum można utworzyć w kompozycji, tworząc archive-my_plugin_lesson.php
plik; Chciałbym jednak, aby wtyczka działała z dowolnym motywem.
Jak mogę zmienić zawartość strony archiwum bez dodawania lub modyfikowania plików motywu?
Edycja:
Rozumiem, że mógłbym użyć archive_template
haka filtra. Wszystko to jednak polega na zastąpieniu szablonu motywu, który wciąż musi być specyficzny dla motywu. Na przykład, prawie każdy szablon tematem będzie potrzebne get_header
, get_sidebar
oraz get_footer
funkcje, ale co powinno id zawartości <div>
być? W każdym temacie jest inaczej.
Chciałbym zastąpić samą treść własną treścią i użyć jej zamiast strony archiwum dla mojego niestandardowego typu postu.
źródło
Możesz użyć
archive_template
haka do przetworzenia zawartości szablonu archiwum motywu, korzystając z poniższego schematu, ale oczywiście będziesz w stanie przetworzyć tylko ułamek motywów, biorąc pod uwagę, że szablon może zasadniczo zawierać dowolną starą rzecz .Schemat polega na załadowaniu szablonu do ciągu (
$tpl_str
) warchive_template
filtrze, podstawieniu treści, dołączeniu ciągu (przy użyciu lewyeval( '?>' . $tpl_str );
), a następnie zwróceniu pustego pliku, tak abyinclude
w pliku „wp-include / template-loader.php” staje się zakazem.Poniżej znajduje się zhakowana wersja kodu, którego używam we wtyczce, która jest skierowana do „klasycznych” szablonów, które używają
get_template_part
i bardziej dotyczy przetwarzania pojedynczych szablonów niż archiwizacji, ale powinna pomóc ci zacząć. Konfiguracja polega na tym, że wtyczka ma podkatalog o nazwie „szablony”, który zawiera pusty plik („null.php”) i szablony treści (np. „Content-single-posttype1.php”, „content-archive-postype1.php”) jak również szablon rezerwowy „single.php” dla pojedynczego przypadku i wykorzystuje niestandardową wersję tego,get_template_part
który wygląda w tym katalogu.Zwyczaj
get_template_part
:Dla kompletności oto cofnięty „single.php”, który używa niestandardowego
get_template_part
:źródło
Zastanawiam się nad tym samym pytaniem i oto hipotetyczne rozwiązanie, które wymyśliłem:
Po aktywacji wtyczki utwórz stronę za pomocą wp_insert_post z nazwą typu posta i treścią shortcode.
Możesz podać opcje w krótkim kodzie dla dodatkowych rozważań dotyczących stylu lub dodać klasy do kontenera pocztowego, aby dopasować style specyficzne lub niestandardowe. Użytkownik może również dodawać dodatkową zawartość przed / po pętli, edytując stronę.
źródło
Możesz użyć filtra
single_template
. Podstawowy przykład zaczerpnięty z Kodeksu :źródło
archive_template
, ale nie sądzę, że zadziała to, co próbuję zrobić. Zredagowałem swoje pytanie, podając więcej informacji.