Lesefortschritt:

    Zuletzt gelesene Beiträge als Widget in der Seitenliste anzeigen

    17. Juni 2026 | functions.php, Word­Press

    Trick # 583 | Dieser Beitrag beinhaltet 748 Wörter. – Geschätzte Lesezeit: ca. 4 Minuten.

    Besonders wenn Ihre Website häufig für Recherchen genutzt wird, kann eine Liste der zuletzt aufgerufenen Beiträge für User hilfreich sein. Ein solches Widget, welches Sie in der Seitenleiste Ihrer Word­Press-Website anzeigen können, bauen wir heute. Es listet die fünf zuletzt gelesenen Beiträge Ihrer BesicherInnen auf.

    Das Widget erstellen Sie mit PHP-Code. Den folgenden Block fügen Sie Ihrer Datei functions.php hinzu – im Backend unter Design/Theme-Datei-Editor:

    // Letztgelesene Beiträge im Widget anzeigen
    // Beiträge beim Lesen speichern
    function track_user_post_view($post_id) {
    if (is_single()) {
    // Für eingeloggte Benutzer
    if (is_user_logged_in()) {
    $user_id = get_current_user_id();
    $recent_posts = get_user_meta($user_id, 'recently_viewed_posts', true);if (!$recent_posts) {
    $recent_posts = [];
    }// Speichere den aktuellen Beitrag mit Timestamp
    $recent_posts[] = [
    'post_id' => $post_id,
    'viewed_at' => current_time('mysql'),
    ];// Halte die Liste auf maximal 5 Einträge beschränkt
    $recent_posts = array_slice($recent_posts, -5);update_user_meta($user_id, 'recently_viewed_posts', $recent_posts);
    } else {
    // Für nicht eingeloggte Benutzer: Cookie verwenden
    $recent_posts = isset($_COOKIE['recently_viewed_posts']) ? json_decode(stripslashes($_COOKIE['recently_viewed_posts']), true) : [];if (!$recent_posts) {
    $recent_posts = [];
    }// Speichere den aktuellen Beitrag mit Timestamp
    $recent_posts[] = [
    'post_id' => $post_id,
    'viewed_at' => current_time('mysql'),
    ];// Halte die Liste auf maximal 5 Einträge beschränkt
    $recent_posts = array_slice($recent_posts, -5);// Speichere die Liste als Cookie
    setcookie('recently_viewed_posts', json_encode($recent_posts), time() + (86400 * 30), '/'); // 30 Tage Gültigkeit
    }
    }
    }
    add_action('wp', function () {
    if (is_single()) {
    global $post;
    if ($post) {
    track_user_post_view($post->ID);
    }
    }
    });// Widget-Klasse für die Seitenleiste
    class RecentPostsWidget extends WP_Widget {
    public function __construct() {
    parent::__construct(
    'recent_posts_widget',
    'Zuletzt gelesene Beiträge',
    ['description' => 'Zeigt die 5 zuletzt gelesenen Beiträge des Benutzers an.']
    );
    }public function widget($args, $instance) {
    echo $args['before_widget'];
    echo $args['before_title'] . 'Zuletzt gelesen' . $args['after_title'];$recent_posts = [];if (is_user_logged_in()) {
    // Für eingeloggte Benutzer
    $user_id = get_current_user_id();
    $recent_posts = get_user_meta($user_id, 'recently_viewed_posts', true);
    } else {
    // Für nicht eingeloggte Benutzer: Cookie verwenden
    if (isset($_COOKIE['recently_viewed_posts'])) {
    $recent_posts = json_decode(stripslashes($_COOKIE['recently_viewed_posts']), true);
    }
    }if (!empty($recent_posts)) {
    echo '<ul>';
    foreach (array_reverse($recent_posts) as $post_info) {
    $post = get_post($post_info['post_id']);
    if ($post) {
    $post_title = esc_html(get_the_title($post));
    $post_url = esc_url(get_permalink($post));
    $viewed_at = date_i18n('d.m.Y H:i', strtotime($post_info['viewed_at']));
    echo "<li><a href='{$post_url}'>{$post_title}</a> <br><small>am {$viewed_at}</small></li>";
    }
    }
    echo '</ul>';
    } else {
    echo '<p>Noch keine Beiträge gelesen.</p>';
    }echo $args['after_widget'];
    }
    }// Widget registrieren
    function register_recent_posts_widget() {
    register_widget('RecentPostsWidget');
    }
    add_action('widgets_init', 'register_recent_posts_widget');

    Das war’s schon.

    Wenn Sie nun im Backend (unter Design/Widgets) Ihrer Seitenleiste das neue Widget «Zuletzt gelesene Beiträge» hinzufügen, werden die zuletzt gelesenen Beiträge an ebendieser Stelle angezeigt.

    Werbung

    Keine Inhalte gefunden.

    Werbung

     

    Pin It on Pinterest

    Share This