Как сделать счётчик просмотров всех записей автора wordpress?
Есть сайт stihi.by
как сделать счётчик просмотров всех записей у каждого автора?
сейчас стоит плагин Posts and Users Stats, который считает просмотры для каждой записи...
Дополнительно:
Ответы:
$autor_id = $post->post_author; $old_view = get_user_meta( $autor_id, '_post_views', true ); $new_views = empty( $old_view ) ? 1 : (int) $old_view + 1; update_user_meta( $autor_id, '_post_views', $new_views ); |
$autor_id = $post->post_author; $old_view = get_user_meta( $autor_id, '_post_views', true ); $new_views = empty( $old_view ) ? 1 : (int) $old_view + 1; update_user_meta( $autor_id, '_post_views', $new_views );
- потенциальные проблемы:
1 racing condition
2 некорректная работа при включенном кэшея бы вынес куда-то в отдельный эндпоинт и внутри дергал прямой запрос к БД типо `SET meta_value = meta_value + 1`
для простого сайта это может быть не нужное усложнение, предложил бы лучше использовать яндекс метрику/гугл аналитику
- Дмитрий,
1) racing condition - возможно, но тут не существенно
2) это просто MVP - что бы избежать проблем с кэшем можно воткнуть через аякс через и для убедится не просто в посещении а в действии запускать по событию, например при прокрутке экрана к определённому месту.про прямой запрос - лишнее. Но можно как угодно, если человек год не может это сделать, то с прямым запросом явно не справится.
ну хочет человек пусть делает, про усложнения не нам судить, люди порой такой хотят, что закачаешься.
- WP Panda, Дмитрий, прикольно вы поговорили друг с другом... я половину ваших слов гуглил )))
- UN_Tony, ну код я дал, он работает, а дальше применяйте его
- WP Panda, из всего выше написанного, я понял, что раз за год я этого не сделал, то не дано... значит нужна помощь во внедрении, сколько будет стоить посильная помощь?
- UN_Tony, почта в профиле, с коммерцией туда
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Счётчик просмотров всех записей автора можно сделать двумя способами: считать просмотры каждой записи и суммировать их при выводе, либо увеличивать общий счётчик автора при каждом просмотре его записи. Второй вариант быстрее на фронте, но требует аккуратности с кэшем и накруткой.
Простой MVP:
add_action('template_redirect', function () { if (!is_singular('post')) { return; } $post_id = get_queried_object_id(); $author_id = (int) get_post_field('post_author', $post_id); if (!$author_id) { return; } $views = (int) get_user_meta($author_id, '_author_total_views', true); update_user_meta($author_id, '_author_total_views', $views + 1); });
Но у него есть минусы: кэш страниц может не запускать PHP, один пользователь может накрутить просмотры обновлением, а при одновременных запросах возможна потеря части инкрементов.
Более надёжно — отправлять просмотр AJAX-запросом или через REST endpoint после загрузки страницы, а в базе увеличивать значение атомарно SQL-запросом. Ещё лучше — использовать Метрику/Analytics для статистики, если точность нужна не для публичного рейтинга, а для понимания посещаемости.
Если просмотры нужны на профиле автора, выводите:
$views = (int) get_user_meta($author_id, '_author_total_views', true); echo number_format_i18n($views);
Для публичных рейтингов обязательно добавьте защиту: не считать администраторов, ботов, повторные просмотры одного IP/пользователя за короткий период и технические превью.