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:
- Jede Menge PC-Spiele zu gewinnen (248)
- Siebenjähriger verlost WordPress-Bücher (175)
- WordPress als CMS: ein Beispiel (147)
- WordPress-Themes verstehen 1 (137)
- 2x Einsteigerseminar WordPress zu gewinnen (106)
- Red Train (88)
- Gewinnspiel zum 1000. Beitrag (84)
- WordPress als CMS: zweites Beispiel (78)
- Blogparade: was soll in die Sidebar? (75)
- Verlosung: 3x OpenSource-T-Shirt und 3x t3n-Magazin (75)
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
Vielen Dank Perun, das hatte ich noch auf der Todo – jetzt hab ich es vor die Füsse geworfen bekommen. 😉
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!
Hm, nehme den Code Schnipsel doch gleich mal mit und packe selbigen in meine internen Notizen bei WordPress.
Danke dafür, wieder mal. 😀
“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 😉
@Ralf,
vielen Dank für den Code.
@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>';
Bei mir funktioniert der Code seltsamerweise nicht. Woran kann’s liegen?