Bislang unkommentierte Artikel in der Sidebar anzeigen


Der Artikel besteht aus 681 Wörtern. Geschätzte Lesezeit: 02:43 Minuten

Ein Blogger, der viel Arbeit und Herzblut in seine Artikel steckt, möchte natürlich auch, das diese später noch gelesen werden.

Man kann auf vielerlei Art und Weise auf Artikel in seinem Blog hinweisen. Zum einen durch die Anzeige zufällig ausgewählter Artikel oder durch die Anzeige der am häufigsten gelesen Artikel. Aber man kann auch Artikel anzeigen lassen, die heute vor x Tagen, Monaten oder gar Jahren geschrieben wurden.

Nicht zuletzt gibt es auch die Möglichkeit, die am häufigsten kommentierten Artikel anzeigen zu lassen.

Daher habe ich mir gedacht, man könnte auch die Artikel anzeigen lassen, die bislang noch gar nicht kommentiert wurden. Wobei natürlich die Frage gestattet ist, ob und wenn ja, in wie weit das Sinn macht, diese anzeigen zu lassen.

Nichts desto trotz habe ich mich hingesetzt und eine Funktion gebastelt die genau das tut. Die Funktion basiert auf der Funktion der noch nicht abgestimmten Umfragen. Sie sieht wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function kein_kommentar() {
global $wpdb;
	$com_query= "SELECT post_type, post_title AS posttitle, post_excerpt, post_name AS postname, comment_status, comment_count FROM $wpdb->posts 
				 WHERE comment_count = '0'
				 AND comment_status ='open'
				 AND post_type='post'
				 GROUP BY post_date
		                 ORDER BY rand()
				 LIMIT 3";	
	$com_result = $wpdb->get_results($com_query);
	if ( empty($com_result) ) {
	echo '<h4 class="sidebar-title">Es gibt keinen unkommentierten Artikel</h4>';
	}
	foreach ($com_result as $comm) {
		$posttitle = $comm->posttitle;
		$postname = $comm->postname;
		echo '<div class="umfrage">';
	echo '<h5><li style="list-style-type:none"><div class="akt-titel"><a href="https://themenfreund.de/'. $comm->postname.'" title="'.$comm->posttitle.'">'.$comm->posttitle.'</a></div>';
	echo '</div>'; 
	}
}

Eine Erklärung der Funktion:

Zeile 1: Erstellen der Funktion
Zeile 2: Zuweisung der globalen WordPress-Datenbank als Quelle
Zeile 3: Füllen der Variablen $com durch Abfrage bezeichneten Tabellenzeilen der Datenbanktabelle _posts

welche die Bedingungen erfüllen

Zeile 4: das die Zahl der Kommentare = 0 ist,
Zeile 5: das Kommentare erlaubt sind,
Zeile 6: und nur bei Seiten vom Typ Artikel
Zeile 7: Sortiere nach Datum
Zeile 8: Zufällige Anzeige
Zeile 9: Maximale Ausgabe von 3 Artikeln
Zeile 10: Übergabe des Inhalts der Variablen $com
Zeile 11: wenn Abfrage leer = keine unkommentierten Artikel
Zeile 12: Ausgabe des Textes 'Es gibt keine unkommentierten Artikel'
Zeile 13: Schließen der If-Schleife
Ansonsten
Zeile 14: Übergabe des Inhalts der Variablen $com_result an $comm
Zeile 15: Übergabe der Variablen $posttitle an die Variable $com->posttitle
Zeile 16: gleiches mit der Variablen $postname an die Variable $comm->postname
Zeile 17 - 18: Ausgabe der Ergebnisse der Abfrage
Zeile 18: Schließen der Foreach-Klammer
Zeile 19: Schließen der Funktion

Anzeigen lässt sich die Funktion in der Sidebar mit folgendem Code:

<?php if (function_exists('kein_kommentar'));?>
		<h3 class="sidebar-title">Unkommentierte Artikel:</h3>	
		<?php echo kein_kommentar(); ?>

Zeile 1: Prüfen ob die Funkion kein_kommentar überhaupt existiert
Zeile 2: Ausgabe der Überschrift
Zeile 3: Ausgabe des Ergebnisses der Funktion

Sinnvoll wäre es vielleicht, wenn man in der ersten Funktion noch eine Bedingung einfügt, die nur Artikel ausgibt die nicht älter als x Tage sind, da die meisten ja in den Kommentaren eine Schranke eingebaut haben, bei der nach eben diesen x Tagen keine Eingabe der URL mehr möglich ist. Und wer kommentiert schon etwas, wo er nicht auf seinen eigenen Blog / seine eigene Webseite verlinken kann!

Eine weitere Möglichkeit wäre natürlich noch, nur Artikel zuzulassen, die aus bestimmten Kategorien stammen.

Was haltet ihr von meinem Code-Schnippsel??

Update 13. März 2013:

Nach Intervention von Stephan habe ich noch am Code geschraubt. Im folgenden erkläre ich mal, was ich geändert oder ergänzt habe:

Zeile 3: Die Select-Anweisung muss um die ID ergänzt werden, um am Ende den korrekten Permalink zu erhalten, ohne das die Domain hartcodiert sein muss. Sprich, die Domain taucht entgegen dem oben gezeigten Code in der vorletzten Echo-Anweisung nicht mehr auf.

Zeile 14 - 16: Die foreach-Anweisung wird um die folgende Variablen-Übergabe ergänzt

$ID = $comm->ID;

Zeile 18: Die Ausgabe wird wie folgt geändert:
von

echo '<h5><li style="list-style-type:none"><div class="akt-titel"><a href="https://themenfreund.de/'. $comm->postname.'" title="'.$comm->posttitle.'">'.$comm->posttitle.'</a>

in

echo '<h5><li style="list-style-type:none"><div class="akt-titel"><a href="'. get_permalink($comm->ID).'" title="'.$comm->posttitle.'">'.$comm->posttitle.'</a></div>';

hier wird also die vormals hartcodierte Ausgabe der Domain mit der anschließenden Ausgabe des posttitles durch eine einzige Ausgabe ersetzt:

get_permalink($com->ID)

Entfernt habe ich noch die Zeile 7 im ersten Code-Block mit Group by.

Damit kann der Code ohne jegliche Anpassung - wie Stephan das angemahnt hatte - kopiert und in jeden beliebigen Blog eingesetzt werden.

Über Marcus 697 Artikel
Ich freue mich über Deinen Besuch auf meinem Blog! Wenn Dir der Artikel gefallen hat, teile ihn doch mit anderen und hinterlasse Deine Meinung. Mehr über mich gibt es hier zu lesen

10 Kommentare

  1. Ich finde auch das ein Blogger mit Kommentaren für seine Texte belohnt wird den dies zeigt doch das sich viele Menschen die Texte durchlesen und er somit eine gute arbeit geleistet hat.

  2. Hallo Marcus,

    also durch „xxx.xxx“ als Link-Verweis wirkt das Ganze recht suspekt. Generell solltest du solche hardcodierten Werte vermeiden. Besser wäre es z.B. die get_permalink-Funktion zu verwenden, damit der unerfahrene WordPress-Nutzer keinen hardcodierten Wert manuell ändern muss.

    Weiterhin prüfst du ob die Variable $upd_result leer ist. Nehmen wir an, dass das der Fall ist – warum dann noch extra die foreach-Schleife zum Zug kommen lassen? Entweder die Schleife in einen else-Zweig packen oder die Abarbeitung der Funktion mittels return vorzeitig beenden.

    Außerdem schreibst du in deiner Erklärung etwas von $com – kann ich im Code-Schnipsel aber nirgends entdecken?!

    Warum selektierst du post_excerpt, wenn du es nicht benötigst?

    GROUP BY post_date sortiert nicht nach dem Datum – würde es nur tun, wenn du nicht ORDER BY rand() angeben würdest – wird dadurch aber überschrieben. Generell bringt dir GROUP BY in diesem Query rein gar nichts. Die Verwendung von ORDER BY rand() kann, soweit ich weiß, ein extremer Performance-Killer sein (einfach mal googlen, wenn du mehr darüber erfahren willst).

    Bin da ganz bei Papa Bodehase – macht es überhaupt Sinn diese Artikel in der Sidebar anzuzeigen?

    Wenn du wirklich die Performance deines Blogs verbessern willst, solltest du wirklich den Einsatz dieser vielen (unnötigen?) Queries überdenken. Letztendlich liegt es ja nicht nur an der Masse der Queries. Das Problem sind meistens auch unoptimierte bzw. performance-lastige Queries.

    Viele Grüße

    Stephan

    • Hallo Stephan!

      Danke für Deinen Kommentar und den Hinweis auf die andere Domain, das hatte ich glatt übersehen. Ich hoffe, Du hast nichts dagegen, das ich die Domain geixt habe.

      Und natürlich hast Du auch recht mit den restlichen Argumenten!

      Mir schwirrte das die letzten Tage nur halt so durch den Kopf und ich wollte ausprobieren, ob ich das hin bekomme. Und im Ansatz hat es ja funktioniert! Ich habe mir so gedacht, das man damit evtl. auf Posts hinweisen könnte, die der eigenen Meinung zufolge vielleicht unberechtigter Weise noch keinen Kommentar erhalten haben.

      Mit dem post_excerpt wollte ich noch einen Auszug aus dem entsprechenden Artikel anhängen. Aber mir stehen dann wiederum meine beschränkten php-Kenntnisse im Weg, die ich zwar versuche im Selbststudium auszubauen, aber ich brauch einfach zu lange, bis es dann Klick gemacht hat und ich ne Sache verstanden habe 🙁

  3. Hey Marcus,

    na ausprobieren und experimentieren ist immer gut – außerdem lernt man dadurch ja auch viel besser. Vielleicht klicken ja wirklich einige Nutzer auf die nicht kommentierten Artikel. Aber du solltest das einfach mal testen (Tracken), inwieweit sich das überhaupt lohnt.

    Grüße

    Stephan

    • Hallo Stephan!

      Woran kann es liegen, das bei gleichem Code get_permalink() auf dem einen Blog funktioniert und auf einem anderen nicht?

      Hier kriege ich als Link ausgegeben: https://themenfreund.de/-0001/11/30/. Und das bei allen angezeigten Links!

      Gruß

      Marcus

      PS: den Grund habe ich wohl gefunden! Auf dem Blog, wo es funktioniert, ist die Link-Struktur domain/postname wohingegen sie hier ja domain/Datum/Postname ist

      • Links habe ich jetzt nicht parat. Aber dachte da an so ne simple Sache, wie die Links mit Google Analytics zu tracken. Nach einem Monat kannst du dann mal schauen, wie oft die unkommentierten Artikel überhaupt angeklickt wurden.

  4. Bezogen auf deinen Code: Du müsstest nur die jeweilige Artikel-ID der get_permalink-Funktion übergeben.

    Dazu musst du in deinem SELECT noch die Post-ID selektieren. In der foreach-Schleife anschließend einfach get_permalink($updat->ID) und dann sollte der Link auch richtig sein.

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


CommentLuv - verlinke einen deiner Blog-Artikel