Введение
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, и оно сохранится в метаданные.
Как внедрить и протестировать?
- Внедрение: Вставьте код в
functions.phpи сохраните. - Проверка доступа: Убедитесь, что текущий пользователь имеет права на редактирование записей.
- Тестирование:
- Откройте страницу записи типа
articlesилиblogи обновите её несколько раз. - Проверьте колонку "Просмотры" в админ-панели.
- Отредактируйте запись и измените значение в метабоксе.
- Откройте страницу записи типа
- Обработка ошибок: Убедитесь, что счётчик не увеличивается на страницах, отличных от
articlesиblog.
Преимущества и ограничения
Преимущества
- Гибкость: Поддерживает несколько типов записей.
- Безопасность: Включает проверки прав и автосохранения.
- Интеграция: Легко добавляется в любую тему.
Ограничения
- Отсутствие кэширования: Может замедлить сайт при большом трафике.
- Ручная настройка: Требуется адаптация под другие типы записей.
- Нет защиты от ботов: Счётчик увеличивается при каждом запросе.
Оптимизация и дополнительные возможности
- Кэширование: Используйте плагин кэширования (например, W3 Total Cache) для снижения нагрузки.
- Защита от ботов: Добавьте проверку 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 час } }); - Вывод на фронтенде: Добавьте отображение счётчика на странице записи:
function display_post_views() { $count = get_post_meta(get_the_ID(), 'post_views_count', true); return $count ? esc_html($count) . ' просмотров' : '0 просмотров'; } - Стилизация колонки: Добавьте CSS:
.column-post_views { width: 80px; text-align: center; }
Заключение
Реализация счётчика просмотров для типов записей articles и blog в WordPress с помощью кастомного кода — это эффективный способ улучшить аналитику и управление контентом. Код обеспечивает автоматическое увеличение счётчика, отображение статистики в админ-панели и ручное редактирование через метабокс. Следуя инструкциям, вы сможете интегрировать эту функциональность в свой сайт, повысив его информативность. Для дальнейшего развития рассмотрите добавление защиты от ботов, кэширования или вывода статистики на фронтенде.
Отзывы