Belov Solutions

Как добавить и настроить счётчик просмотров для постов в WordPress

Введение

WordPress — это мощная платформа для создания сайтов, однако её стандартные функции не включают встроенный счётчик просмотров для записей. Добавление такого функционала может быть полезно для блогеров, журналистов и владельцев контентных сайтов, чтобы отслеживать популярность статей и постов. В этой статье мы подробно разберём, как реализовать счётчик просмотров для пользовательских типов записей (например, articles и blog) с использованием кастомного кода. Мы создадим систему, которая будет автоматически увеличивать счётчик при просмотре страницы, отображать количество просмотров в списке записей в админ-панели и добавлять редактируемое поле в метабокс статьи. Код будет безопасным, оптимизированным и легко интегрируемым в любую тему WordPress.

Зачем нужен счётчик просмотров?

Добавление счётчика просмотров в WordPress предоставляет следующие преимущества:

  • Аналитика контента: Позволяет определить, какие статьи наиболее популярны среди читателей.
  • Улучшение UX: Популярные статьи можно выделять для привлечения внимания.
  • SEO-оптимизация: Данные о просмотрах могут помочь в стратегии продвижения контента.
  • Управление контентом: Редакторы могут вручную корректировать счётчик для корректной статистики.

Как работает код?

Предоставленный код состоит из трёх основных частей: увеличение счётчика при просмотре, отображение статистики в админ-панели и добавление метабокса для ручного редактирования. Давайте разберём каждую часть.

1. Увеличение счётчика просмотров

Хук wp запускает функцию при загрузке любой страницы WordPress. Условие is_singular(['articles', 'blog']) проверяет, является ли текущая страница одиночной записью типа articles или blog. Если да, то:

  • get_the_ID() получает ID текущей записи.
  • get_post_meta($post_id, 'post_views_count', true) извлекает текущее значение счётчика из метаданных.
  • update_post_meta($post_id, 'post_views_count', ($count ?: 0) + 1) увеличивает счётчик на 1, используя тернарный оператор для установки начального значения 0, если метаданные пусты.

2. Отображение статистики в админ-панели

Эта часть добавляет колонку "Просмотры" в список записей и делает её сортируемой:

  • Добавление колонки: Фильтры manage_articles_posts_columns и manage_blog_posts_columns добавляют новую колонку post_views.
  • Вывод данных: Действия manage_articles_posts_custom_column и manage_blog_posts_custom_column заполняют колонку значением из post_views_count, отображая 0, если данных нет.
  • Сортировка: Фильтры manage_edit-articles_sortable_columns и manage_edit-blog_sortable_columns делают колонку сортируемой, а действие pre_get_posts настраивает сортировку по мета-ключу post_views_count как числовому значению.

3. Добавление метабокса для просмотров

Метабокс позволяет вручную редактировать счётчик:

  • Создание метабокса: Хук add_meta_boxes добавляет бокс "Просмотры записи" для типов articles и blog с полем ввода.
  • Сохранение данных: Действия save_post_articles и save_post_blog сохраняют введённое значение, проверяя права пользователя, автосохранение и конвертируя данные в положительное число с помощью absint.

Код для реализации счётчика просмотров

/* счётчик просмотров начало */
// увеличиваем счётчик просмотров на странице статьи начало
add_action('wp', function () {
    if (is_singular(['articles', 'blog'])) {
        $post_id = get_the_ID();
        $count = get_post_meta($post_id, 'post_views_count', true);
        update_post_meta($post_id, 'post_views_count', ($count ?: 0) + 1);
    }
});
// увеличиваем счётчик просмотров на странице статьи конец

// выводим количество просмотров статьи в общем списке статей начало
add_filter('manage_articles_posts_columns', function ($columns) {
    $columns['post_views'] = 'Просмотры';
    return $columns;
});

add_filter('manage_blog_posts_columns', function ($columns) {
    $columns['post_views'] = 'Просмотры';
    return $columns;
});

add_action('manage_articles_posts_custom_column', function ($column, $post_id) {
    if ($column === 'post_views') {
        $count = get_post_meta($post_id, 'post_views_count', true);
        echo $count !== '' ? esc_html($count) : '0';
    }
}, 10, 2);

add_action('manage_blog_posts_custom_column', function ($column, $post_id) {
    if ($column === 'post_views') {
        $count = get_post_meta($post_id, 'post_views_count', true);
        echo $count !== '' ? esc_html($count) : '0';
    }
}, 10, 2);

add_filter('manage_edit-articles_sortable_columns', function ($columns) {
    $columns['post_views'] = 'post_views_count';
    return $columns;
});

add_filter('manage_edit-blog_sortable_columns', function ($columns) {
    $columns['post_views'] = 'post_views_count';
    return $columns;
});

add_action('pre_get_posts', function ($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }

    if ($query->get('orderby') === 'post_views_count') {
        $query->set('meta_key', 'post_views_count');
        $query->set('orderby', 'meta_value_num');
        $query->set('meta_type', 'NUMERIC');
    }
});
// выводим количество просмотров статьи в общем списке статей конец

// добавление поля в метабокс статьи "Просмотры записи" начало
add_action('add_meta_boxes', function () {
    $post_types = ['articles', 'blog'];
    foreach ($post_types as $post_type) {
        add_meta_box(
            $post_type . '_views_meta_box',
            'Просмотры записи',
            function ($post) {
                $count = get_post_meta($post->ID, 'post_views_count', true);
                $count = $count !== '' ? esc_attr($count) : '0';
                ?>
                

<label for="post_views_count">Количество просмотров:</label> <input type="number" id="post_views_count" name="post_views_count" value="<?php echo $count; ?>" min="0" style="width: 100%;">

<?php }, $post_type, 'side', 'default' ); } }); add_action('save_post_articles', function ($post_id, $post) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if ($post->post_type !== 'articles') return; if (!current_user_can('edit_post', $post_id)) return; if (isset($_POST['post_views_count'])) { $views = absint($_POST['post_views_count']); update_post_meta($post_id, 'post_views_count', $views); } }, 10, 2); add_action('save_post_blog', function ($post_id, $post) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if ($post->post_type !== 'blog') return; if (!current_user_can('edit_post', $post_id)) return; if (isset($_POST['post_views_count'])) { $views = absint($_POST['post_views_count']); update_post_meta($post_id, 'post_views_count', $views); } }, 10, 2); // добавление поля в метабокс статьи "Просмотры записи" конец /* счётчик просмотров конец */

Где разместить код?

Код следует добавить в файл functions.php активной темы или дочерней темы:

  • Шаги: Откройте wp-content/themes/ваша-тема/functions.php, вставьте код в конец файла и сохраните. Рекомендуется использовать дочернюю тему, чтобы избежать потери изменений при обновлении.
  • Преимущества: Полная интеграция с темой без дополнительных плагинов.
  • Ограничения: Код будет потерян при смене темы, если не перенесён вручную.

Примеры использования

1. Автоматическое увеличение счётчика

При посещении страницы статьи с ID 123, если счётчик был 5, он увеличится до 6. Это происходит незаметно для пользователя.

2. Отображение в админ-панели

В списке записей типа articles появится колонка "Просмотры" с числами, например:

  • Статья 1: 10 просмотров
  • Статья 2: 0 просмотров

3. Редактирование в метабоксе

При редактировании записи можно ввести значение, например, 15, и оно сохранится в метаданные.

Как внедрить и протестировать?

  1. Внедрение: Вставьте код в functions.php и сохраните.
  2. Проверка доступа: Убедитесь, что текущий пользователь имеет права на редактирование записей.
  3. Тестирование:
    • Откройте страницу записи типа articles или blog и обновите её несколько раз.
    • Проверьте колонку "Просмотры" в админ-панели.
    • Отредактируйте запись и измените значение в метабоксе.
  4. Обработка ошибок: Убедитесь, что счётчик не увеличивается на страницах, отличных от articles и blog.

Преимущества и ограничения

Преимущества

  • Гибкость: Поддерживает несколько типов записей.
  • Безопасность: Включает проверки прав и автосохранения.
  • Интеграция: Легко добавляется в любую тему.

Ограничения

  • Отсутствие кэширования: Может замедлить сайт при большом трафике.
  • Ручная настройка: Требуется адаптация под другие типы записей.
  • Нет защиты от ботов: Счётчик увеличивается при каждом запросе.

Оптимизация и дополнительные возможности

  1. Кэширование: Используйте плагин кэширования (например, W3 Total Cache) для снижения нагрузки.
  2. Защита от ботов: Добавьте проверку IP или использование куки:
    add_action('wp', function () {
        if (is_singular(['articles', 'blog']) && !isset($_COOKIE['viewed_post_' . get_the_ID()])) {
            $post_id = get_the_ID();
            $count = get_post_meta($post_id, 'post_views_count', true);
            update_post_meta($post_id, 'post_views_count', ($count ?: 0) + 1);
            setcookie('viewed_post_' . $post_id, '1', time() + 3600); // Куки на 1 час
        }
    });
  3. Вывод на фронтенде: Добавьте отображение счётчика на странице записи:
    function display_post_views() {
        $count = get_post_meta(get_the_ID(), 'post_views_count', true);
        return $count ? esc_html($count) . ' просмотров' : '0 просмотров';
    }
  4. Стилизация колонки: Добавьте CSS:
    .column-post_views {
        width: 80px;
        text-align: center;
    }

Заключение

Реализация счётчика просмотров для типов записей articles и blog в WordPress с помощью кастомного кода — это эффективный способ улучшить аналитику и управление контентом. Код обеспечивает автоматическое увеличение счётчика, отображение статистики в админ-панели и ручное редактирование через метабокс. Следуя инструкциям, вы сможете интегрировать эту функциональность в свой сайт, повысив его информативность. Для дальнейшего развития рассмотрите добавление защиты от ботов, кэширования или вывода статистики на фронтенде.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована