@wp_starter

Как правильно добавлять данные о кол-ве просмотров постов в базе данных WordPress?

Приветствую!

Для практики хотел разработать простенький плагин для WordPress, одной из функций которого было бы отображение количества просмотров для каждого поста. Но не знаю как правильно реализовать в плане обновления данных счетчика в базе.

Хотел узнать, каким образом правильно обновлять количество просмотров в БД. Корректно ли это делать при каждом просмотре поста? Или данные где-то сохраняются и в базу добавляются потом, а не так часто?

Плох ли такой способ?

function increment_post_views() {
    if (is_singular()) {
        $post_id = get_the_ID();
        $views_key = 'post_views_count';
        $views = get_post_meta($post_id, $views_key, true);
        $views = $views ? intval($views) + 1 : 1;
        update_post_meta($post_id, $views_key, $views);
    }
}
add_action('wp', 'increment_post_views');

function display_post_views() {
    if (is_singular()) {
        $post_id = get_the_ID();
        $views_key = 'post_views_count';
        $views = get_post_meta($post_id, $views_key, true);
        echo 'Количество просмотров: ' . $views;
    }
}


Или тут зависит от посещаемости? Чем больше она, тем больше проблем от этого способа будет?

Благодарю за помощь!
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега WordPress
Python, JS, WordPress, SEO, Bots, Adversting
Корректно ли это делать при каждом просмотре поста?

Или тут зависит от посещаемости? Чем больше она, тем больше проблем от этого способа будет?

Все верно, нагрузка на сервер/бд будет прямо пропорциональна посещаемости.
Хотел узнать, каким образом правильно обновлять количество просмотров в БД.

Или данные где-то сохраняются и в базу добавляются потом, а не так часто?

Все верно, но зависит от нагрузки:
- Малая нагрузка: делаем стандартным образом, при обновление поста - обновляем счетчик в бд.
- Средняя нагрузка: обновляем код так, чтобы он мог использовать транзитное кэширование wp (set_transient()).
- Большая нагрузка: используем внешние очереди (например redis или rabbitmq), данные с которых снимаем и пишем в бд раз в N сек/мин.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@pantsarny
В вашем способе будут теряться просмотры из-за состояния гонки, а в целом он годится при небольших нагрузках
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы