Wordpress Code Snippets – Random Post Shortcode
Heute zeige ich dir aus der Reihe “Wordpress Code Snippets” ein kleines Snippet, mit dem du zum Beispiel auf deiner Startseite, random – also zufällig – 3 Beiträge anzeigen lassen kannst. Das Besondere dabei: Die Auswahl wird 24 Stunden gleich bleiben und sich erst am nächsten Tag wieder ändern! Es ist also ein daily random shortcode 😉
DarkWolfCave.de
WordPress Code Snippets – Random Post Shortcode – Erklärung
Ganz einfach ausgedrückt erzeugen wir ein eigenen Shortcode, der alle deine veröffentlichen Artikel durchwühlt und sich zufällig 3 rauspicken wird. Diese werden dann als Vorschau ausgegeben.
Dabei prüft das Snippet ob dies schon in einem bestimmten Intervall geschehen ist (hier 24 Stunden).
Innerhalb dieses Zeitfensters wird die Ausgabe gespeichert und bei jedem Aufruf der Seite erneut angezeigt. Erst nach dem Ablauf startet die Random-Funktion erneut. Es arbeitet also ähnlich wie ein Cache.
Du wirst hier einen groben Überblick finden.
Allerdings biete ich dir auch noch etwas mehr Support an:
- Du benötigst persönlichen Support
- Du möchtest von Beginn an Unterstützung bei deinem Projekt
- Du möchtest ein hier vorgestelltes Plugin durch mich installieren und einrichten lassen
- Du würdest gerne ein von mir erstelltes Script etwas mehr an deine Bedürfnisse anpassen
Für diese Punkte und noch einiges mehr habe ich einen limitierten
VIP-Patreon Tarif
eingerichtet. Falls er dir dort zurzeit nicht angeboten wird,
kontaktiere mich bitte über Discord und wir finden eine Lösung!
Was brauchen wir ?
Eigentlich nicht viel, da wir alles selbst erstellen werden. Du kannst dieses Snippet in einem Child-Theme erstellen oder du nutzt das PlugIn CodeSnippets*(empfohlen) dazu.
PlugIn CodeSnippets
Ich werde mich hier auf das PlugIn CodeSnippets* beziehen. Da ich dieses schon seit langem verwende und dieses gerade für solche kleineren Code-Schnipsel perfekt geeignet ist.
Es gibt es in der kostenlosen “Free” Version: CodeSnippets Free*
Und seit kurzem auch endlich in einer “Pro” Version: CodeSnippets Pro*
Ein paar Worte mehr zu CodeSnippets findest du bei den genialsten Wordpress PlugIns
dwc_post_modified_date (OPTIONAL)
Weiterhin benötigst du – allerdings optional – noch ein zweiten Snippet.
Sofern du von deinen Artikeln das letzte Änderungsdatum anzeigen lassen möchtest.
Ich verwende diese Funktion in mehreren anderen Snippets. Daher lasse ich dies auch hier “getrennt”.
Allerdings kannst du dieses auch weglassen. Im Sourcecode von unserem Random Post Shortcode werde ich die Zeile entsprechend kennzeichnen, die du dann einfach weglassen bzw. aus kommentieren müsstest.
function dwc_post_modified_date($args) { $mod_date = get_the_modified_date($format=get_option( 'date_format' ),$args); if ( get_the_date($format=get_option( 'date_format' ),$args) !== $mod_date ) { return 'letzte Änderung: ' . $mod_date ; } else { return 'Erstellt am: ' . get_the_date($format=get_option( 'date_format' ),$args); } } add_shortcode( 'modified_date', 'dwc_post_modified_date' );
Random Post Shortcode
<?php function dwc_random_post_shortcode() { // Cache/transient bereits vorhanden (liefert true oder false) $dwc_random_post = get_transient( 'dwc_random_post' ); // wurde kein cache/transient angelegt, dann führe die query aus if ( $dwc_random_post === false ) { // Argumente für deine Artikel, die random angezeigt werden sollen. // Hier alle mit type "post" - also Beiträge // die veröffentlicht "publish" wurden // maximal 3 zufällig anzeigen 'rand' // BITTE Beschreibung zu dem "tax_query" Array auf darkwolfcave.de lesen! Die Kategorie (hier 106) muss bei dir sicher angepasst werden $args = array( 'post_type' => array( 'post' ), 'post_status' => 'publish', 'posts_per_page' => 3, 'orderby'=>'rand', 'tax_query'=> array( array( 'taxonomy' => 'category', 'terms' => '106', //Kategorie 106 (news) ausschließen 'operator' => 'NOT IN' ) ) ); // Abrufen der Artikel $dwc_random_post = get_posts($args); // Neuen Cache/transient anlegen, der 24 Stunden gültig ist set_transient( 'dwc_random_post', $dwc_random_post, 24 * HOUR_IN_SECONDS ); } //initialisieren der Variablen/arrays unset($inhalt); $dwc_ids = array(); //bauen unseres Loops, damit wir auch die Artikel sehen werden $inhalt = '<div>'; foreach ($dwc_random_post as $post) { //falls die random-Suche mehrmals denselben Post ausspuckt wollen wir den Artikel dennoch nur einmal sehen $postid = $post->ID; if (in_array($postid,$dwc_ids)) { continue; } else { //die "su- " klassen stammen von einem plugin "ShortcodeUltimate". Hier müsstest du die Klassen an deine // eigenen anpassen oder weglassen. Beispiel: <div> <h2> $inhalt .= '<div class="su-posts su-posts-default-loop">'; $inhalt .= '<h2 class="su-post-title"><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</h2></a>'; //folgende Zeile NICHT mit einbauen wenn du "dwc_post_modified_date" nicht auch als Snippet benutzt! $inhalt .= '<div class="su-post-meta">'.dwc_post_modified_date($post->ID).'</div>'; //Zeile drüber und Kommentar beachten! $inhalt .= '<p>'.get_the_excerpt($post->ID).'</p><br/>'; $inhalt .= '<br/><br/></div>'; array_push($dwc_ids,$postid); } } $inhalt.= '</div>'; // Einmal resetten bitte und den Wert aus unserem inhalt-Array zurückgeben wp_reset_postdata(); return $inhalt; } //der shortcode, welcher dann auch was anzeigen lässt add_shortcode( 'random_post', 'dwc_random_post_shortcode' );
Wie erstelle ich ein neuen CodeSnippet?
Nachdem du CodeSnippets installiert und aktiviert hast, findest du im Admin-Bereich in der Menüleiste den Punkt snippets -> neu hinzufügen
Hier trägst du einfach den Namen (beliebig, aber sollte schon etwas aussagen) und den PHP-Code ein.
Jedes Snippet nur eine Box 😉
Also für die beiden oben genannten “dwc_post_modified_date” und “Random Post Shortcode” erstellst du jeweils ein eigenes Snippet.
Wie bekomme ich jetzt den Shortcode auf meine Seite?
Wie auch bei jedem anderen Shortcode. Du erstellst oder editierst deine Seite wo du die Random-Artikel sehen willst und fügst ein Shortcode ein. Z.B. im Gutenberg-Editor über “+” und Shortcode.
Der Name für unseren lautet dann [[random_post]]. Das war es auch schon.
Achso… speichern/aktualisieren natürlich noch.
Genauere Beschreibung / Erklärung des Snippets Random Post Shortcode
Ich werde mit dir heute nicht alles Zeile für Zeile durchgehen, da dies hier wohl nicht zwingend notwendig ist. Du darfst dich aber natürlich wie immer bei mir melden, solltest du Fragen dazu haben oder du bei einem Fehler Hilfe benötigst.
Damit unsere Random Post sich nicht jedes mal beim neu laden der Seite ändert, müssen wir unser Ergebnis eine Zeitlang speichern. Dies erreichen wir mit “Transients” – über den Aufruf get_transient
.
Mit der Zeile $dwc_random_post = get_transient( 'dwc_random_post'
); fragen wir ab, ob schon ein transient mit dem Namen “dwc_random_post” vorhanden ist. Falls nicht, erhalten wir ein false zurück, ansonsten ein true.
In der IF-Abfrage prüfen wir entsprechend. Und nur wenn ein false zurückgemeldet wurde, starten wir eine neue Query um unsere Random Posts zu erhalten.
Dafür legen wir in Zeile 13-26 ein entsprechendes Array mit Werten an.'post_type' => array( 'post' ), // nur Artikel anzeigen (post)
'post_status' => 'publish', // nur welche die veröffentlicht sind (publish)
'posts_per_page' => 3, // maximal 3 Artikel (feel free...)
'orderby'=>'rand', //sortiere zufällig (rand)
Jetzt bitte aufpassen 😉
Mit dem folgenden array schließe ich bei mir eine ganze Kategorie aus. Denn aus dieser möchte ich KEINE Artikel zufällig haben. In meinem Fall ist das die Kategorie mit Namen “news” und der tag_ID 106.
Du kannst die tag_ID herausfinden, indem du im Admin-Bereich zu “Beiträge”->”Kategorien” gehst, dort bei der entsprechenden Kategorie mit der Maus drüber fährst, und dann unten links aus dem Link die Tag_ID ausließt:
Daher wirst du bei dir dieses hier anpassen, ganz herausnehmen oder einfach drin lassen müssen.
Solltest du es nicht ändern, und keine “106” Kategorie haben, passiert auch nichts weiter.
Falls bei dir aber “106” die Kategorie ist, unter der bei dir alle wichtigen Artikel erscheinen, solltest du sie dringend hier ändern…. sonst wirst du nicht viel sehen.'tax_query'=> array(
array(
'taxonomy' => 'category',
'terms' => '106', //Kategorie 106 (news) ausschließen
'operator' => 'NOT IN'
In Zeile 32 legen wir dann den transient an um unser Ergebnis für 24 Stunden zu speichern:set_transient( 'dwc_random_post', $dwc_random_post, 24 * HOUR_IN_SECONDS );
Die foreach-Schleife ab Zeile 41 läuft dann alle gefundenen Artikel durch, prüft ob die ID schon bereits vorhanden ist (macht bei größere Anzahl Sinn, da wir ja keine doppelten Artikel sehen wollen) und gibt dann eine Vorschau der Artikel zurück.
Zeile 57-59:
Diese bitte nur einbauen, sofern du auch das optionale “dwc_post_modified_date” Snippet bei dir eingerichtet hast. Ansonsten einfach entfernen / nicht einbauen. Dies zeigt lediglich zu dem Artikel das Erstellungsdatum oder die letzte Änderung an.
//folgende Zeile NICHT mit einbauen wenn du "dwc_post_modified_date" nicht auch als Snippet benutzt!
$inhalt .= '<div class="su-post-meta">'.dwc_post_modified_date($post->ID).'</div>';
//Zeile drüber und Kommentar beachten!
Ein Wort noch zu den “class” Klassen… in meinem Beispiel nutze ich css-Klassen aus dem PlugIn “ShortcodeUltimate” – solltest du dies nicht haben, werden diese natürlich ignoriert. Hier kannst du entweder eigene Klassen (die du nutzt) eintragen, leer lassen oder so wie sie jetzt auch sind belassen…. Ist halt Optik 😉
In der letzten (75) Zeile erstellen wir dann unser eigenes Random Post Shortcodeadd_shortcode( 'random_post', 'dwc_random_post_shortcode' );
Mit Shortcode: [[random_post]] können wir es dann später überall benutzen.
Trage dich in den Newsletter ein!
Sie sehen gerade einen Platzhalterinhalt von Brevo. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen