Zum Inhalt springen
Termin vereinbaren (öffnet in einem neuen Fenster)

Beliebte Beiträge anzeigen – ohne Plugin

Ein Zähler im Beitragsfeld und eine Abfrage. Mit einer Einschränkung, die man vorher kennen sollte.

Zuletzt geprüft: 3 Minuten Lesezeit

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

Seiten-Caching

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

Tipp

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.

Anrufen Website prüfen Anfragen

Darstellung

Diese Einstellungen gelten nur auf diesem Gerät und werden lokal in deinem Browser gespeichert. Es wird nichts übertragen.

Farbschema
Schriftgröße
Lesbarkeit
Erklärung zur Barrierefreiheit