Ich schreibe ein Plugin, das einen benutzerdefinierten Beitragstyp mit dem Namen "my_plugin_lesson" erstellt:
$args = array (
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'lessons', 'with_front' => false)
);
register_post_type ('my_plugin_lesson', $args);
Der benutzerdefinierte Beitragstyp verfügt über ein Archiv und die URL des Archivs lautet:
http://example.com/lessons
Ich möchte das Aussehen dieses Archivs anpassen. Ich möchte die Beiträge in einem Tabellenformat auflisten und nicht im Standardarchiv für WordPress-Blogbeiträge. Ich verstehe, dass eine benutzerdefinierte Archivvorlage im Thema erstellt werden kann, indem die archive-my_plugin_lesson.php
Datei erstellt wird. Ich möchte jedoch, dass das Plugin mit jedem Thema funktioniert.
Wie kann ich den Inhalt der Archivseite ändern, ohne Themendateien hinzuzufügen oder zu ändern?
Bearbeiten:
Ich verstehe, dass ich den archive_template
Filterhaken verwenden könnte. Dies ersetzt jedoch nur die Themenvorlage, die noch themenspezifisch sein muss. Zum Beispiel gerade über jedes Thema Vorlage muß das get_header
, get_sidebar
und get_footer
Funktionen, aber was sollte die ID des Inhalts <div>
sein? Dies ist in jedem Thema anders.
Ich möchte den Inhalt selbst durch meinen eigenen Inhalt ersetzen und diesen anstelle der Archivseite für meinen benutzerdefinierten Beitragstyp verwenden.
quelle
Sie können den
archive_template
Hook verwenden, um den Inhalt der Archivvorlage eines Themas mithilfe des folgenden Schemas zu verarbeiten. Natürlich können Sie jedoch immer nur einen Bruchteil der dortigen Themen verarbeiten, da eine Vorlage im Grunde genommen alles Alte enthalten kann .Das Schema besteht darin, die Vorlage in eine Zeichenfolge (
$tpl_str
) imarchive_template
Filter zu laden , Ihren Inhalt zu ersetzen, die Zeichenfolge einzuschließen (mit dem Trickeval( '?>' . $tpl_str );
) und dann eine leere Datei zurückzugeben, sodass die Dateiinclude
in "wp-includes / template-loader.php" wird ein No-Op.Im Folgenden finden Sie eine gehackte Version des Codes, den ich in einem Plugin verwende. Diese Version zielt auf "klassische" Vorlagen ab, die diese verwenden,
get_template_part
und befasst sich mehr mit der Verarbeitung einzelner Vorlagen als mit der Archivierung, soll Ihnen jedoch den Einstieg erleichtern. Das Setup besteht darin, dass das Plugin ein Unterverzeichnis namens "Templates" hat, das eine leere Datei ("null.php") und Inhaltsvorlagen (z. B. "content-single-posttype1.php", "content-archive-postype1.php") enthält. sowie eine Fallback-Vorlage "single.php" für den Einzelfall und verwendet eine benutzerdefinierte Version davonget_template_part
, die in diesem Verzeichnis angezeigt wird .Der Brauch
get_template_part
:Der Vollständigkeit halber hier das Fallback "single.php", das den Brauch verwendet
get_template_part
:quelle
Ich habe über dieselbe Frage nachgedacht, und dies ist die hypothetische Lösung, die ich mir ausgedacht habe:
Erstellen Sie bei der Plugin-Aktivierung eine Seite mit wp_insert_post, wobei der Name der Beitragstyp und der Inhalt der Shortcode ist.
Sie können im Shortcode Optionen für zusätzliche Stilüberlegungen bereitstellen oder dem Postcontainer Klassen hinzufügen, die themenspezifischen oder benutzerdefinierten Stilen entsprechen. Der Benutzer kann auch zusätzlichen Inhalt vor / nach der Schleife hinzufügen, indem er die Seite bearbeitet.
quelle
Sie können den Filter verwenden
single_template
. Ein grundlegendes Beispiel aus dem Codex :quelle
archive_template
, aber ich denke nicht, dass dies für das funktioniert, was ich versuche zu tun. Ich habe meine Frage mit weiteren Informationen bearbeitet.