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 WordPress-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


