займ на карту с любой кредитной историей

Beliebte Artikel in WordPress

Kategorie: Bloging, Webentwicklung

Wer mir auf Twitter folgt, oder regelmäßig hier im Blog vorbei schaut, weiß sicher schon, dass ich gerade an einem neuen Theme für Netheweb arbeite.

Aktuell bin ich dabei alles umzusetzen, was ich mir beim designen so habe einfallen lassen und stehe da dann teilweise auch vor der einen oder anderen Herausforderung. Oder es gibt ganz einfach mehrere Möglichkeiten ein bestimmtest Feature zu erhalten.

Das war übrigens auch der Grund für diesen Artikel. Ich habe mich nämlich dazu entschieden, kein Plugin zu verwenden um die beliebtesten Artikel anzeigen zu lassen.

Wieso die ganze Arbeit?

Weil Plugins ja bekannter Maßen, die Datenbanken zumüllen, bei jedem Blog extra installiert werden müssen und weil es alle Nase lang neue Updates gibt, bei denen sich dann doch nichts ändert.

Außerdem hab ich mir auf Twitter noch einmal bestätigen lassen, dass das NICHT verwenden von Plugins auch die Ladezeit einer Seite beschleunigen kann, die ja seit kurzem bekannter maßen offiziell relevant für das Ranking ist.

Meine aktuelle Lösung funktioniert bis jetzt ganz gut, weshalb ich denke, dass ich sie euch schon präsentieren kann.

Da ich nicht die Views tracken möchte bzw. das auch zu aufwendig wäre, habe ich mich dazu entschieden die Kommentare als Indikator für die besten Artikel zu nehmen.

Ihr braucht übrigens keine Angst zu haben, dass man PHP-Guru sein müsste um so eine kleine Sache hin zu bekommen, denn das bin ich auch nicht.


Ich bin in drei einfachen Schritten vorgegangen:

1. Welchen Befehl brauche ich um eine Liste der Artikel mit den meisten Kommentaren zu erhalten?

Hier hat mir Google weiter geholfen, aber damit ihr euch das suchen sparen könnt, habe ich euch den Befehl hier einmal angegeben. So könnt ihr eventuell auch den Prozess verstehen, in dem das Snippet entstanden ist.


SELECT id,post_title FROM wp_posts ORDER BY comment_count DESC LIMIT 0,10


Die „10“ gibt übrigens die Nummer an Artikeln an, die vom Plugin gezeigt werden

2. Die Daten mit PHP ausgeben lassen:

Das Ganze war schon etwas komplizierter für mich, da ich ja eigentlich kein PHP kann. Ich hab mir dann aber ein paar Snippets angesehen und versucht das Prinzip zu verstehen. Danach ging es im „Try and Error“-Prinzip weiter, bis alles geklappt hat.

Der reine PHP Code ist also:


$popular_posts = $wpdb->get_results("SELECT id,post_title FROM {$wpdb->prefix}posts ORDER BY comment_count DESC LIMIT 0,10");
foreach($popular_posts as $post) {
// Hier kommt hin, was mit der $post Variable gemacht werden soll
}


3. Nachdem das fertig war, kam der leichteste Teil, das Ganze mit HTML und CSS noch in das Design einpassen und etwas stylen.


<div class="Posts">
<h3>Beliebte Artikel </h3>
<ul>
<?php
$popular_posts = $wpdb->get_results("SELECT id,post_title FROM {$wpdb->prefix}posts ORDER BY comment_count DESC LIMIT 0,10");
foreach($popular_posts as $post) {
print "<li><a href='". get_permalink($post->id) ."'>".$post->post_title."</a></li>\n";
}
?>
</ul>
</div>


Edit: hier dann noch, die Verbesserte Version, die Markus in den Kommentaren, vorgeschlagen hat:


<div class="Posts">
<h3>Beliebte Artikel <//h3>
<ul>
<?php query_posts('showposts=10&orderby=comment_count'); while (have_posts()) : the_post(); ?>
<li><a href="" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_query(); ?>
</ul>
</div>


Jetzt müsst ihr nur noch in euren Stylesheet die einzelnen Elemente so formatieren, dass es in eurem Design gut aussieht, ich denke das bekommt ihr hin.

Achso, was ich vergessen hatte, der Code muss natürlich an die Stelle, wo ihr die Posts anzeigen lassen wollt.

Was haltet ihr von dem Output? Habe ich irgendwelche groben Schnitzer eingebaut oder ist alles glatt gelaufen? Würde mich über Feedback freuen und wenn alles gut gelaufen ist, versuche ich mich denke ich noch an ein paar anderen Funktionen ohne Plugin.

Sensei

Geschrieben von Sensei am 11. 4. 2010
Abgelegt unter: Bloging, Webentwicklung
Tags: , , , ,

21 Kommentare zu “Beliebte Artikel in WordPress”

  • Tim_G sagt:

    Das kommt gerade recht, da ich enenfalls die beliebtesten Artikel in meinem Blog anzeigen lassen möchte. Ich werde mir deine Lösung auf jeden Fall mal als Lösungsansatz bookmarken oder evtl. gleich ganz übernehmen.
    Zu deiner Anmerkung Ladzeit als SERP-Kriterium: das ist zwar richtig, ist derzeit allerdings nur für google.com (nicht de) gültig – und selbst dort nur für unter 1% der Suchergebnisse. Natürlich sollte man aber trotzdem als guter Webmaster auch immer die Ladezeiten im Auge behalten – ich würde aber jetzt nicht gleich auf Grund der google-Meldung in Hektik und Panik verfallen ;-)

  • Sensei sagt:

    Ich denke das muss jeder für sich entscheiden, wie er reagieren will, wobei ich auch Gerüchte gehört habe, dass google.de nicht mehr so lange unter den Lebenden weilen soll. Was dran ist weiß ich nicht.

    Auf jedenfall ist eine kurze Ladezeit auch gut für die Usability

  • Jürgen sagt:

    Ja, es ist richtig was Tim_G meint … erstmal wichtig bei Google.com, aber google.de wird in Kürze nachziehen und man kann sich sicher sein, dass der Einfluss nicht lange auf 1% bleibt.

    Sofern das überhaupt stimmt, oder ist das eine offizielle Aussage von Google? Wenn ja wo?

  • Markus sagt:

    Öhm wenn schon optimieren dann richtig ;-)

    query_posts(array(‘showposts’ => 10,’orderby’ => comment_count));

    Kann man dann auch noch nach Kategorie und/oder Tag oder was auch immer machen.

  • Sensei sagt:

    @Markus ich hab ne Idee was du sagen willst, begreife es aber im Moment irgendwie nicht vollkommen, das ich wie ändern sollte

  • Tim_G sagt:

    @ Jürgen
    Das mit den 1% ist nachzulesen im offiziellen google Webmaster Central Blog

    Zitat: “Currently, fewer than 1% of search queries are affected by the site speed…”

  • Jürgen sagt:

    Danke Tim_G,

    das hatte ich doch glatt irgendwie überlesen.

  • Markus sagt:

    Also ganz richtig in diesem Beispiel wäre:

    query_posts(‘showposts=10&orderby=comment_count’);

    Ganz normal mit WP Loop arbeiten also. Danach kommt dann wie zum Beispiel auf der index.php das Zeug mit while (have_posts) blablabla…

    Das ist dann schon alles in den Loop gepackt was Du brauchst. So musst du zum Beispiel dann nicht mehr mit get_permalink arbeiten, sondern kannst auf den Link direkt per the_permalink zugreifen, was wieder Datenbank schonender ist.

    Trau mich nicht den ganzen Code zu posten, denke den zerhaut es mir hier?

  • Sensei sagt:

    Bin mir nicht sicher, du kannst ihn mir auch per Email schicken und ich packe ihn dann in den Artikel, so dass ihn jeder sieht. Bekommst natürlich auch den Ruhm ^

  • Markus sagt:

    Habs Dir mal geschickt, aber nicht des Ruhmes wegen ;-)

  • Sensei sagt:

    Super, danke habe es mal ergänzt in dem Artikel :) Werde es nachher für mein neues Theme auch gleich mal einbauen.

  • Markus sagt:

    Wie gesagt ich bin auch kein MySQL Profi, aber es wird immer davon abgeraten in einer foreach Schleife weitere Abfragen zu tätigen. In dem Beispiel dürfte es jetzt glaub ich nicht soviel ausmachen. Vielleicht sieht das ja mal ein richtiger Profi und kann was dazu sagen. Vielleicht auch ob und ab wann sich das evtl. bezahlt macht. Da man in Deinem Beispiel erst nur ID und Titel holt und dann in der Schleife den Rest. In meinem Beispiel holt man sich ja sofort alles vom Artikel, da sind natürlich auch Dinge dabei die man nicht benötigt, man erspart sich aber dann die weitere Abfrage in der Schleife. Das sind so die Unterschiede kurz und knapp erklärt.

    Wenn Du das nachher einbaust kannst Du ja evtl. mal die einzelnen Abfragen prüfen, wieviel je Beispiel wirklich getätigt werden. Ich müsste dazu Wincache abschalten und das geht nur Global, hab mich da noch nicht eingearbeitet wie das auch für einzelne Websites geht, deshalb bekomm ich keine wirklich guten Ergebnisse, da immer Abfragen aus dem Cache kommen.

  • Mac sagt:

    Beliebte Artikel anhand der Kommentare?

    Da würde ich eher “meist kommentiert” daraus machen.

    Beliebte Artikel anhand der Views wäre wohl zutreffender.

    Denn es gibt durchaus Artikel die 10.000 Mal aufgerufen werden ohne je einen Kommentar gesehen zu haben. Bei mir ist das zum Beispiel so.

  • Sensei sagt:

    Wie man das Ganze dann nennt, kann denke ich jeder für sich selbst entscheiden.

    Bei mir ist es zum Beispiel so, dass ich sehr viele Kommentare bekommen, für die Anzahl an Besuchern, die ich täglich habe. Ich kann also für meinen Blog schon von den beliebtesten Artikeln sprechen.

  • Tanja sagt:

    Kleine Kosmetik: Bei Deinen ersten 2 Beispielen gehört ans Ende noch ein endforeach, sonst dürfte das in netten Fehlermeldungen enden. Grundsätzlich gefällt mir aber auch Markus Lösung besser, mit query_posts kann man schon viel anstellen. Der wp_reset_query ist auch die saubere Lösung, ansonsten kann bei den folgenden Abfragen auch mal ein ziemlicher Mist rauskommen ;-)

    @Markus: Wenn das Ganze in der Sidebar umgesetzt wird, dann dürfte es keine aktiven foreach-Schleifen mehr geben.
    Ansonsten müsste man die beiden Versionen mal gegeneinander laufen lassen. Der Vorteil der ersten Versionen ist halt, dass nur das aus der Datenbank geholt wird, was wirklich gebraucht wird und nicht den gesamten Post wie bei query_posts.

  • Markus sagt:

    @Tanja Sein Beispiel ist schon richtig da wird mit Klammern gearbeitet das ersetzt das endforeach. Die Forschleife ist im obigen Beispiel immer vorhanden, egal ob in der Sidebar oder woanders. Wenn Du eine Schleife programierst, wird die auch ausgeführt. Der ist es egal wo sie eingebaut wird :-)

  • Tanja sagt:

    @Markus: okay ;-) Hab es natürlich nicht nachgebaut und ausprobiert…
    Ich muss aber auch sagen, dass ich grundsätzlich nur neue SQL Abfragen mit foreach Schleifen verwende, wenn es nichts diesbezügliches von WordPress gibt. In der Regel greife ich auf die vorhanden WordPress Funktionen zurück, die ja reichlich vorhanden sind (wie Dein query_posts).

  • Guru 2.0 sagt:

    Hi!
    Die Lösung von Markus ist definitv die Beste.
    Nur hast Du den href Parameter im Anchor vergessen. Dort sollte href=”” stehen

  • Guru 2.0 sagt:

    href = “shortTag the_permalink() shortTag”

  • Markus sagt:

    Der ging wohl unterwegs verloren :-)

  • Motorrad sagt:

    Hey da!

    Danke für den Code! Gibt es noch eine Möglichkeit die Länge des Links zu begrenzen? Wäre super :)

    mfg

Einen Kommentar hinterlassen

Kategorien