Summe der Beiträge, Seiten, Kategorien, Tags, Kommentare für das WordPress Theme
Anzeige
Im vorhergehenden Beitrag habe ich eine Lösung gezeigt, wie man ohne den Einsatz eines Plugins die Gesamtanzahl der Kommentare ausgeben kann, siehe Artikel „Summe der Kommentare in WordPress“. Scheinbar ist es aktuell sehr beliebt oder die Frage stand schon des öfteren und so kamen einige Anfragen per Kommentar, wie man auch andere statistische Werte auslesen kann und so im Frontend des Blog dem User mitteilen kann. Jeriko hat in den Kommentaren schon einen Hinweis gegeben der aber für den einen oder anderen nicht ausführlich genug ist, daher in diesem Artikel die Lösung.
Die folgenden Lösungen sind nur mit einer Version von WordPress größer/gleich 2.5 funktionieren. Da ich davon ausgehe, dass die meisten „Theme-Designer/-schrauber“, ihr Blog auf einer dieser Version fahren. Alternativ gern per Kommentar, dann versuche ich zu helfen.
Anzahl der Beiträge
$num_posts = wp_count_posts( 'post' );
$num_posts = $num_posts->publish; //publish, draft
Anzahl der Seiten
$num_pages = wp_count_posts( 'page' );
$num_pages = $num_pages->publish; //publish
Anzahl der Kategorien
$num_cats = wp_count_terms('category');
Anzahl der Tags
$num_tags = wp_count_terms('post_tag');
Anzahl der Kommentare
$num_comm = get_comment_count();
$num_comm = $num_comm['approved']; //approved, awaiting_moderation, spam, tot
// Möglichkeit 2
$num_comm2 = wp_count_comments( );
$num_comm2 = $num_comm2->approved; //approved, moderated, spam, total_comments
Ausgabe
Die obigen Syntax zeigen einfach und ohne die direkte Einbindung in HTML, wie man zu den Werten kommt. Kann man verschieden Arten von Inhalten auslesen, so stehen die entsprechenden Schlüssel im Kommentar des Code. An einem weiteren Beispiel zeige ich nochmal alle Ergebnisse mit Sprachanpassung und die Ausgabe in HTML als Liste. Diese Ausgabe kann sich dann sicher jeder anpassen und in sein Design integrieren.
<?php
$num_posts = wp_count_posts( 'post' );
$num_posts = $num_posts->publish; //publish, draft
$num_posts = sprintf( __ngettext( '%s Beitrag', '%s Beiträge', $num_posts ), number_format_i18n( $num_posts ) );
$num_pages = wp_count_posts( 'page' );
$num_pages = $num_pages->publish; //publish
$num_pages = sprintf( __ngettext( '%s Seite', '%s Seiten', $num_pages ), number_format_i18n( $num_pages ) );
$num_cats = wp_count_terms('category');
$num_tags = wp_count_terms('post_tag');
$num_comm = get_comment_count();
$num_comm = $num_comm['approved']; //approved, awaiting_moderation, spam, total_comments
$num_comm = sprintf( __ngettext( '%s Kommentar', '%s Kommentare', $num_comm ), number_format_i18n( $num_comm ) );
$num_comm2 = wp_count_comments( );
$num_comm2 = $num_comm2->approved; //approved, moderated, spam, total_comments
echo '<ul>';
echo '<li>Beiträge: ' . $num_posts . '</li>';
echo '<li>Seiten: ' . $num_pages . '</li>';
echo '<li>Kategorien: ' . $num_cats . '</li>';
echo '<li>Tags: ' . $num_tags . '</li>';
echo '<li>Kommentare: ' . $num_comm . '</li>';
echo '<li>Kommentare 2: ' . $num_comm2 . '</li>';
echo '</ul>';
?>
Auch beide dieser Ausgabe kann man mittels diverser Möglichkeiten das Design anpassen. Dazu kann man Klassen oder IDs vergeben, die man dann per CSS anspricht. Ein Beispiel zeigt der Artikel „Summe der Kommentare in WordPress“, bei dem man einen Button mit der Anzahl der Kommentare dargestellt hat.
Meistkommentierten Beiträge
<?php
if ( !function_exists('most_popular_posts') ) {
function most_popular_posts($no_posts = 5, $before = '<li>', $after = '</li>', $show_pass_post = false, $duration='') {
global $wpdb;
$request = "SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS 'comment_count' FROM $wpdb->posts, $wpdb->comments";
$request .= " WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish'";
if(!$show_pass_post)
$request .= " AND post_password =''";
if($duration != "") {
$request .= " AND DATE_SUB(CURDATE(),INTERVAL ".$duration." DAY) < post_date ";
}
$request .= " GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_count DESC LIMIT $no_posts";
$posts = $wpdb->get_results($request);
$output = '';
if ($posts) {
foreach ($posts as $post) {
$post_title = stripslashes($post->post_title);
$comment_count = $post->comment_count;
$permalink = get_permalink($post->ID);
$output .= $before . '<a href="' . $permalink . '" title="' . $post_title.'">' . $post_title . '</a> (' . $comment_count.')' . $after;
}
} else {
$output .= $before . "None found" . $after;
}
return $output;
}
}
?>
<?php echo most_popular_posts(); ?>
28. August 2008 um 10:14
danke sehr. da schreibt man einen kommentar was man sich noch wünscht und zack ist es da. sehr schön beschrieben!
28. August 2008 um 10:25
Du hast bei dir im Feed die Anzahl der Kommentare für den Beitrag eingebaut. Ist das eine Funktion des Copyright-Plugins oder auch eine Sonderlösung?
28. August 2008 um 10:27
@ad: ja, das Plugin kann mit diversen Syntax erweitert werden, steht in den Optionen zum Plugin.
28. August 2008 um 10:36
Danke Frank, für diese ausführliche Erklärung des ganzen. Somit kann ich dann jetzt endlich mich daran machen und diese Funktion in meinem Blog verbauen. DANKE, mein HELD!
28. August 2008 um 10:41
@Frank: Danke, da habe ich es nicht gefunden, aber auf der Seite des Plugins!
28. August 2008 um 11:47
Sehr interessante Lösung. Ich denke, das werd ich auch noch irgendwo einbauen. Vielleicht im Footer ungefähr so:
"Es wurden bislang W Beiträge in X Kategorien mit Y Tags versehen. Insgesamt wurden Z Kommentare verfasst."
Die Zahl der moderierten und nicht moderierten Kommentare und wieviele Drafts man hat, dürfte den gemeinen Besucher nicht so interessieren. Trotzdem gut, dass man das so auslesen und anzeigen kann.
28. August 2008 um 17:40
Vielen Dank, für deine ausführliche Erklärung! ^_^
Aber was ist denn mit diesen Befehlen:
Sind die veraltet? Kann man die noch benutzen?
28. August 2008 um 19:49
@Nici: der Code wurde verschluckt, eventuell sendest du ihn per Mail, dann pflege ich ihn nach.
28. August 2008 um 21:02
Ok, noch ein Versuch:
(?php print sem_showTotalPosts(); ?)(?php print sem_showTotalComments(); ?)Dieses mal habe ich die spitzen Klammern, durch runde ersetzt ^_~
28. August 2008 um 21:14
@Nici: Die Funktionen kommen sicher aus einem Plugin oder Theme, die sind nicht von WordPress.
29. August 2008 um 11:11
Noch anbei ne Frage dazu.
Kann man So eine Besucher Anzeige wie dort im Footer, auch ohne Plugin hinbekommen? Also auf etwa die gleiche Weise?
Ein kleines Code-Tutorial von dir dazu, evtl. ?
29. August 2008 um 11:48
@nastorseriessix: Dies ist nicht ohne die Speicherung von Daten zu machen; Frank macht das via Service und die Integration von JS.
29. August 2008 um 11:54
Aha, verstehe.
Na so wichtig ist mir diese Funktion nun auch nicht, wollte nur mal halt genau wissen, von jemanden der Ahnung hat davon, ob das auch ohne Plugin funktioniert. Am besten auf die ähnliche Art und Weise wie das Auslesen der anderen Daten, mit hilfe des Codes-snippet das du hier vorgestellt hast. Danke aber für die Erklärung.
...anbei noch eine Frage, da ich es selber nicht mehr rausfinde so recht. Es gibt doch die Möglichkeit, für verschiedene Usergruppen auch verschiedene Themes anzuzeigen, aber wie ging das noch mal? Meines wissens mit einem Plugin, aber ich weiss nicht mehr wie das heisst. Ne idee?....
29. August 2008 um 11:58
@nastorseriessix: Dazu gibt es hier im Blog eine Lösung, die du dir anpassen kannst: User Theme
2. September 2008 um 16:49
Vielen Dank für den Beitrag, genau das, was ich gesucht habe
14. September 2008 um 21:29
Danke Frank für dieses Tutorial, Dein Blog ist immer wieder eine Schatztruhe für WP-Anwender
Was mich noch interessieren würde: Ist es auch möglich, die meistgelesenen und/oder meistkommentierten Beiträge auszugeben? Ich habe das bisher mit Semmelstatz gemacht, aber irgendwie verträgt sich das Plugin nicht mehr mit meinem Theme...
14. September 2008 um 23:12
@Markus: Die meistgelesenen kann man nur via Plugin ausgeben, ich nutze dafür mein PostReadCouter, siehe Plugins.
Für die meistkommentierten Beiträge geht folgende Funktion.
<?php if (!function_exists('most_popular_posts')) { function most_popular_posts($no_posts = 5, $before = '14. September 2008 um 23:53
Danke für die schnelle Antwort. Dass ich für die meistgelesenen Artikel ein Plugin benötige, habe ich befürchtet. Das andere werde ich gleich mal testen.
2. März 2009 um 19:40
Danke! Sehr hilfreich!
26. Januar 2010 um 02:04
perfekt. genau das hab ich gesucht. allerdings hätte ich noch eine frage.
und zwar wollte ich genau wie auf deiner seite unten eine navigation einfügen. Doe muss aber gar nocht o umfangreich sein, ich würde gern einfach nur "Seite ? von ?" dastehen haben. einen count hab ich ja jetzt .. aber vlt könntest du mir noch sagen wie ich die aktuelle seite auslesen kann.
26. Januar 2010 um 15:01
@mihou:dazu gibt es Plugins für WordPress, z.B. WP PageNavi