Support » Allgemeine Fragen » Archive Seite für Posttype in Plugin

  • runerahlke

    (@runerahlke)


    Moin,

    ich programmiere ein Plugin, das einen Posttype „test“ erstellt. Dieser Posttype soll ein Archiv haben. Die HTML Template Dateien sollen vom jeweiligen Theme genommen werden.

    Wie schaffe ich es z.B. die page.php von irgendeinem Theme für das Archiv des Plugins zu nutzen, dort einen Shortcode in die page.php zu hooken, um diesen dann ausführen zu lassen und meinen gewünschten Inhalt zu zeigen?

    Also
    1. Wie benutze ich die page.php als Archivtemplate für den Posttype „test“.
    2. Wie integriere ich in das Template anschließend einen Shortcode? Per Content ist das ja bei Archiven nicht möglich, richtig?

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)
  • Moderator Bego Mario Garde

    (@pixolin)

    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.

    runerahlke

    (@runerahlke)

    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.

    Moderator Bego Mario Garde

    (@pixolin)

    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.

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)