Hier gehen ein paar Dinge durcheinander.
WordPress verwendet bei der Darstellung von Inhalten Templates in hierarchischer Reihenfolge.
Soll heißen: zuerst wird geschaut, welche Art von Inhalt abgerufen werden soll (Beitrag, Seite, Archiv, Custom Post Type, …) und dann wird geschaut, ob es dafür ein spezifisches Template gibt.
Erstellst du einen CPT test
und willst eine Zusammenfassung von Beiträgen dieser Inhaltsart (ein Archiv) ausgeben, sucht WordPress zuerst nach einem Template archive-test.php
. Gibt es das nicht, fällt WordPress auf ein allgemeineres archive.php
zurück, wobei Entwickler hier die Möglichkeit haben, mit if-Statements für verschiedene Inhaltsarten Unterscheidungen zu treffen. Gibt es auch kein archive.php
, fällt WordPress auf das universelle index.php
zurück, das in jedem Theme enthalten sein muss.
Umgekehrt bedeutet das, wenn du eine besondere Darstellung für die Beitragsübersicht der Inhaltsart test
haben möchtest, dass du deinem (Child-)Theme ein neues Template archive-test.php
hinzufügst – das wird dann automatisch genommen, auch ohne Shortcode oder Templateauswahl.
Soll das Template für die Darstellung einzelner Beiträge gestalterisch so aussehen wie Seiten, kannst du das Template page.php
als single-test.php
kopieren. Auch das wird dann wieder automatisch von WordPress verwendet, wenn ein einzelner test
-Beitrag angezeigt werden soll.
Im Block-Editor hast du außerdem auch die Möglichkeit, in Seiten einen Block mit Beiträgen einer bestimmten Inhaltsart zu integrieren – sinngemäß also ein bisschen Text, ein hübsches Bild, die letzten fünf Beiträge der Inhaltsart test
, wieder lustiger Text, usw. Das hat man damals™ mit Shortcodes gemacht, die aber seit Einführung des Blockeditors so zeitgemäß erscheinen wie die Verwendung eines Fax-Geräts.
Das ist mir soweit bewusst, ich möchte aber ein Plugin machen, was reintheoretisch auf jeder WordPress Website aktiviert werden kann und das Plugin soll dann das Template des jeweils auf der Website verwendeten Themes benutzen.
Dann habe ich deine Frage missverstanden – sorry.
Der klassische Weg wäre dann tatsächlich, einen Shortcode zu programmieren, der Beiträge des Custom Post Type abruft und zurückgibt:
add_shortcode( 'test', 'my_test_shortcode' );
function my_test_shortcode( $atts ) {
extract( shortcode_atts( array (
'anzahl' => 'anzahl'
), $atts ) );
$args = array(
'post_type' => 'test',
'orderby' => 'title',
'posts_per_page' => $anzahl,
);
$query = new WP_Query( $args );
$out = '';
if( $query->have_posts() ){
$out .= '<ul>';
while( $query->have_posts() ){
$query->the_post();
$out .= '<li>' . get_the_title() . '</li>';
}
$out .= '</ul>';
}
wp_reset_postdata();
return $out;
}
Den Inhalte der Ausgabe musst du noch entsprechend ergänzen und z.B. die CSS-Klassen verwenden, die im Theme genutzt werden. Da der Shortcode in eine Seite eingefügt wird, wird automatisch das Layout der Seite angezeigt.
Die moderne Variante ist, einen Block zu verwenden, der den Custom Post Type ausgibt. Den kannst du entweder selber programmieren, was mit Hilfe des Plugins Block Lab Dank ausgezeichneter Dokumentation recht zügig vorangeht, oder du verwendest ein fertiges Plugin, bei dem du in der Sidebar angeben kannst, welcher Inhaltstyp angezeigt werden soll. Das geht z.B. mit Custom Query Blocks.