Есть ли в WordPress функционал, который бы показывал статьи которые смотрел посетитель за последнее время

Есть ли в WordPress функционал, который бы показывал статьи которые смотрел посетитель за последнее время
По типу Моя лента, или просмотренное?

Просто PHP-блок для вставки в шаблон

В functions.php (один раз)


// Трекинг просмотров
add_action('wp_footer', 'track_viewed_posts_js');
function track_viewed_posts_js() {
    if (!is_single()) return;
    ?>
    <script>
    (function() {
        const postId = <?php echo get_the_ID(); ?>;
        const key = 'viewed_posts';
        let viewed = JSON.parse(localStorage.getItem(key) || '[]');
        viewed = viewed.filter(id => id !== postId);
        viewed.unshift(postId);
        if (viewed.length > 30) viewed = viewed.slice(0, 30);
        localStorage.setItem(key, JSON.stringify(viewed));
    })();
    </script>
    <?php
}

// AJAX-обработчик
add_action('wp_ajax_get_viewed_posts', 'get_viewed_posts_handler');
add_action('wp_ajax_nopriv_get_viewed_posts', 'get_viewed_posts_handler');
function get_viewed_posts_handler() {
    $ids = isset($_POST['post_ids']) ? $_POST['post_ids'] : '';
    if (empty($ids)) wp_send_json_success(array());
    
    $post_ids = array_filter(array_map('intval', explode(',', $ids)));
    if (empty($post_ids)) wp_send_json_success(array());
    
    $query = new WP_Query(array(
        'post__in'       => $post_ids,
        'orderby'        => 'post__in',
        'posts_per_page' => count($post_ids),
        'post_status'    => 'publish',
    ));
    
    $posts = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'title' => get_the_title(),
                'url'   => get_permalink(),
                'date'  => get_the_date('d.m.Y'),
            );
        }
        wp_reset_postdata();
    }
    
    wp_send_json_success($posts);
}

В шаблон страницы (куда хочешь)

<div id="my-feed-list">Загрузка...</div>

<script>
(function() {
    const viewed = JSON.parse(localStorage.getItem('viewed_posts') || '[]');
    const container = document.getElementById('my-feed-list');
    
    if (!viewed.length) {
        container.innerHTML = '<p>Вы пока ничего не смотрели.</p>';
        return;
    }
    
    fetch('<?php echo admin_url('admin-ajax.php'); ?>', {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        body: 'action=get_viewed_posts&post_ids=' + viewed.join(',')
    })
    .then(r => r.json())
    .then(data => {
        if (!data.success || !data.data.length) {
            container.innerHTML = '<p>Ничего не найдено.</p>';
            return;
        }
        let html = '<ul style="list-style:none;padding:0;">';
        data.data.forEach(p => {
            html += `<li style="padding:10px 0;border-bottom:1px solid #eee;">
                <a href="${p.url}" style="text-decoration:none;color:#333;display:block;">
                    <strong>${p.title}</strong>
                    <span style="display:block;font-size:13px;color:#888;margin-top:3px;">${p.date}</span>
                </a>
            </li>`;
        });
        html += '</ul>';
        container.innerHTML = html;
    })
    .catch(() => container.innerHTML = '<p>Ошибка загрузки.</p>');
})();
</script>

guest
Закрыть меню
ZAPLATA.RU | Магазин готовых блогов Wordpress с автонаполнением
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.