Wie man in WordPress eine Liste mit Beiträgen einer bestimmten Art erzeugt

Wie man in WordPress eine Liste mit Beiträgen einer bestimmten Art erzeugt

Nachdem ich ein eigenes Formular entwickelt habe, beim dem die Daten einen neuen Beitrag erzeugen, möchte ich nun eine Liste dieser Beiträge im Frontend haben.

(siehe Beitrag Wie man in WordPress ein Formular erstellt und die Daten in einem neuen Beitrag speichert)

Die Beiträge aus diesem Formular haben immer einen Titel in der Form „Beratungsprotokoll zu Vorgangsnummer 000nn“.

Ich habe auch ein zweites Formular erstellt, welches Folgeberichte erzeugt. Diese haben einen Titel in der Form „Folgebericht Beratungsprotokoll zu Vorgangsnummer 000nn“.

Damit können quasi Antwortbeiträge zu einem Protokoll erstellt werden.

Die Liste nun, die ich haben möchte, soll auf einer Seite erscheinen. Sie soll zuerst die Vorgangsnummer anzeigen, dann alle Berichte, beginnend mit dem ersten Hauptbericht.

Und so soll es aussehen :

Freigegebene Berichte sollen beginnen mit einem : 

Berichte in Draft-Modus hingegen mit einem : 

Freigegebene Berichte sollen mit dem Beitrag verlinkt sein.

Berichte in Draft-Modus hingegen mit einer Seite, die darauf hinweist, dass der Bericht noch nicht freigegeben ist :

Was ist zu tun?

Schritt 1

Ein Plugin installieren, damit PHP-Code aus einer Seite oder einem Beitrag exekutiert werden kann. Ich verwende „Insert PHP Code Snippet“.

Schritt 2

Eine Seite anlegen mit dem Titel „Berichtsstatus falsch“.
Eine weitere Seite mit dem Titel „Berichte“.

Schritt 3

Einige Beiträge anlegen, die im Titel oben beschriebenen Text haben.

Schritt 4

Einen PHP-Schnipsel in dem PHP-Plugin anlegen und folgenden Code speichern :

<?php

$postids = $wpdb-> get_results( $wpdb->prepare( 
 "
 SELECT ID, RIGHT(post_title,20) AS gkey, post_title, post_status, guid
 FROM wp_posts
 WHERE post_title LIKE '%%Beratungsprotokoll zu Vorgangsnummer%%'
 AND (post_status = 'publish' OR post_status = 'draft')
 ORDER BY gkey, ID"
) ); 

 $gkey = "";
 foreach ( $postids as $id )
 {
 if ( $gkey != $id->gkey ) 
 {
 if ( $gkey != "" )
 echo "<hr>";
 echo "<b>".$id->gkey."</b><br>";
 $gkey = $id->gkey;
 }
 echo '<h5><a href="'. 
 ($id->post_status == "draft" ? esc_url( get_permalink( get_page_by_title( 'Berichtsstatus falsch' ))) : get_permalink( $id->ID, false )).
 '">'.($id->post_status == "publish" ? "&#10003;" : "&#8635;").' '.$id->post_title.'</a>
 </h5>'; 
 } 
?>

Bitte daran denken, dass meine WordPress-Tabellen den Präfix „wp“ haben. Daher dringend den eigenen Präfix, bspw. wp_* benutzen.

Schritt 5

Den PHP-Schnipsel nun in die neue Seite „Berichte“ einfügen, ggf. ohne <?php … und …?>, je nach Plugin.

Fertig!

So, nun viel Spaß und Erfolg damit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert