perun.net – WordPress & Webwork



WordPress: Artikel mit meisten Kommentaren

Von am 14. 01. 2011 um 11:42

Will man in WordPress die meist kommentierten Artikel auflisten lassen, dann kann man auf eine Reihe von Erweiterungen zurückgreifen. Es geht aber auch mit "Bordmitteln" und zwar mit Hilfe der Funktion WP Query. Hier ein einfaches Beispiel:

<ol>
<?php $popular = new WP_Query('orderby=comment_count&posts_per_page=10'); ?>
	<?php while ($popular->have_posts()) : $popular->the_post(); ?>
	<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?> (<?php comments_number('0','1','%'); ?>)</a></li>
<?php endwhile; ?>
</ol>

Code-Quelle: WPShout.com

Die Ausgabe des oberen Codes liefert in diesem Weblog folgendes Ergebnis, in Klammern befindet sich die zahl der Kommentare:

  1. Jede Menge PC-Spiele zu gewinnen (248)
  2. Siebenjähriger verlost WordPress-Bücher (175)
  3. WordPress als CMS: ein Beispiel (147)
  4. WordPress-Themes verstehen 1 (137)
  5. 2x Einsteigerseminar WordPress zu gewinnen (106)
  6. Red Train (88)
  7. Gewinnspiel zum 1000. Beitrag (84)
  8. WordPress als CMS: zweites Beispiel (78)
  9. Blogparade: was soll in die Sidebar? (75)
  10. Verlosung: 3x OpenSource-T-Shirt und 3x t3n-Magazin (75)

Diesen Artikel weiterempfehlen:

Premium WordPress Themes

Verwandte Artikel:

 — 


7 Kommentare

  1. 1.Kalliey®

    Kommentar vom 14.01.2011 um 12:02

    Vielen Dank Perun, das hatte ich noch auf der Todo – jetzt hab ich es vor die Füsse geworfen bekommen. ;)

  2. 2.Dominik

    Kommentar vom 14.01.2011 um 12:14

    Ich habe den Code eben mal getestet. Klappt Prima. Sag mal….gibt es so einen einfachen Code um aktuelle Besucherzahlen anzeigen zu lassen. Ich habe dafür aktuell ein Plugin laufen, das ich gerne über Board werfen würde!

  3. 3.LexX Noel

    Kommentar vom 14.01.2011 um 15:29

    Hm, nehme den Code Schnipsel doch gleich mal mit und packe selbigen in meine internen Notizen bei WordPress. :mrgreen:

    Danke dafür, wieder mal. :D

  4. 4.Ralf

    Kommentar vom 14.01.2011 um 18:09

    "It retains a lot of information on the request, which can be pulled at a later date." (Codex)

    Dem schließe ich mich mal an. Der Code oben holt sämtliche Daten der Posts heran obwohl nur ein paar benötigt werden. Auf kleinen Blogs mit wenig Verkehr ist das in der Regel kein Problem. Aber wenn die Verbindung zur Datenbank eh schon ächzt und stöhnt, wäre man mit einer SQL-Abfrage besser bedient.

    global $wpdb;
    $limit = 10; // Anzahl der Beiträge die gelistet werden sollen
    $what = "ID, post_title"; Felder die abgefragt werden sollen
    $sql = "SELECT $what FROM $wpdb->posts ORDER BY comment_count LIMIT $limit";
    $popular = $wpdb->query( $sql );
    foreach( $popular as $pop_post ) { ...HTML-Ausgabe... }

    Je nachdem ob man ein Blog mit vielen sehr langen Artikeln hat, kann dies zum Flaschenhals werden. Sich dann auf das wesentliche zu beschränken, kann mitunter dem Blog mal wieder Beine machen ;)

  5. 5.Perun

    Kommentar vom 14.01.2011 um 20:22

    @Ralf,

    vielen Dank für den Code.

  6. 6.Ralf

    Kommentar vom 15.01.2011 um 12:25

    @perun: Nichts zu danken, aber der Code würde nicht wirklich funktionieren. Ich hatte den Code leider etwas unüberlegt aus dem Kopf runter gerattert. Folgender Code sollte auch per Copy&Paste funktionieren:
    global $wpdb;

    //Felder die abgefragt werden sollen
    $what = 'ID, post_title, comment_count';
    // Einschränkung der Datensätze
    $where = "comment_count <> 0 AND post_status = 'publish' AND post_type = 'post'";
    // Anzahl der Beiträge die gelistet werden sollen
    $limit = 10;
    // SQL-Abfrgae durchführen
    $sql = "SELECT {$what} FROM {$wpdb->posts} WHERE {$where} ORDER BY comment_count DESC LIMIT {$limit}";
    $popular = $wpdb->get_results( $sql );

    echo '<ol>';
    foreach( $popular as $pop_post ) {

    $perm_link = get_permalink( $pop_post->ID );
    $title = $pop_post->post_title;
    $title_attrib = the_title_attribute( 'echo=0' );
    $num_comms = $pop_post->comment_count;

    echo '<li><a href="' . $perm_link . '" rel="bookmark" title="' . $title_attrib . '">' . $title . ' (' . $num_comms . ')</a></li>';
    }
    echo '</ol>';

  7. 7.oggy

    Kommentar vom 15.01.2011 um 19:01

    Bei mir funktioniert der Code seltsamerweise nicht. Woran kann's liegen?

Hinweis:
WordPress 3.8 für Autoren & Redakteure (pdf)
Ausdruckbar, Volumenlizenzen zu sehr fairen Preisen.

Tut mir Leid, aber die Kommentar-Funktion ist momentan deaktiviert.



Weblog der perun.net webwork gmbh mit Artikeln zum Thema WordPress, Webwork, und Internet.