Beliebte Beiträge anzeigen – ohne Plugin
Ein Zähler im Beitragsfeld und eine Abfrage. Mit einer Einschränkung, die man vorher kennen sollte.
Teil 1: Aufrufe zählen
add_action( 'wp', function () {
if ( ! is_singular( 'post' ) || is_robots() || is_preview() ) {
return;
}
// Angemeldete Benutzer nicht mitzaehlen - sonst zaehlt man
// hauptsaechlich sich selbst.
if ( is_user_logged_in() ) {
return;
}
$id = get_queried_object_id();
$aufrufe = (int) get_post_meta( $id, 'idigit_aufrufe', true );
update_post_meta( $id, 'idigit_aufrufe', $aufrufe + 1 );
} );
Der Zähler liegt als Beitragsfeld an jedem Beitrag. Er beginnt bei null; ältere Beiträge stehen also nicht automatisch vorn, sondern erst nach einer Weile.
Teil 2: Die beliebtesten ausgeben
$beliebt = new WP_Query( [
'posts_per_page' => 3,
'meta_key' => 'idigit_aufrufe',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'ignore_sticky_posts' => true,
] );
if ( $beliebt->have_posts() ) {
echo '<ul>';
while ( $beliebt->have_posts() ) {
$beliebt->the_post();
printf(
'<li><a href="%s">%s</a></li>',
esc_url( get_permalink() ),
esc_html( get_the_title() )
);
}
echo '</ul>';
wp_reset_postdata();
}
Das wp_reset_postdata() am Ende ist nicht optional. Ohne
es zeigt der Rest der Seite unter Umständen die Daten des letzten
Beitrags aus dieser Schleife an.
Die Einschränkung, die man kennen muss
Wenn deine Website einen Seiten-Zwischenspeicher verwendet – ein Plugin wie WP Super Cache oder LiteSpeed Cache, oder eine serverseitige Lösung –, dann wird PHP beim zweiten Aufruf derselben Seite gar nicht mehr ausgeführt. Der Besucher bekommt eine fertige HTML-Datei.
Der Zähler zählt dann fast nichts mehr. Das ist kein Fehler im Code und lässt sich mit diesem Ansatz auch nicht beheben – wer verlässliche Zahlen braucht, kommt an einer richtigen Auswertung nicht vorbei. Matomo etwa misst im Browser und ist vom Zwischenspeicher unabhängig.
Für eine kleine Seite ohne Cache ist der Schnipsel dagegen völlig ausreichend – und spart ein Plugin.
Wohin der Code gehört
Teil 1 gehört in ein Child-Theme oder ein
Code-Plugin, nicht in die functions.php des Themes.
Teil 2 gehört dorthin, wo die Liste erscheinen soll – in eine
Theme-Vorlage oder einen eigenen Shortcode. Vorher eine
Sicherung
anlegen.
Passt das nicht auf deinen Fall?
Dieser Artikel beantwortet die Frage allgemein – deine ist vermutlich konkreter. Schreib mir kurz, worum es geht. Ich antworte selbst, meist am selben Tag, und es kostet nichts.
Hat dir das geholfen?
Dann sag es weiter. Eine kurze Bewertung dauert dreißig Sekunden und sorgt dafür, dass die Nächsten diese Antwort überhaupt finden.
Passt dazu
- Schnipsel Beitragsbilder im RSS-Feed anzeigen Der Feed liefert nur Titel und Text. Vier Zeilen, damit auch das Beitragsbild mitkommt.
- Schnipsel Seitenweise Blättern in WordPress einbauen Statt „vorherige" und „nächste" eine richtige Seitenauswahl – ohne Plugin.
- Schnipsel Shortcode für PayPal-Spenden erstellen Ein Kürzel wie [donate], das überall im Text zu einem Spendenlink wird.
- Schnipsel WordPress-Suchfunktion deaktivieren Ein Schnipsel für die Fälle, in denen die eingebaute Suche mehr stört als hilft – ohne die Suche im Verwaltungsbereich mit abzuschalten.