Проверьте, находится ли пользователь в сети?

Я просто хочу показать зеленый круг после имени пользователя, если пользователь в сети, и ничего, если пользователь отключен.

Я нашел этот 5-летний вопрос, но обе идеи кажутся плохими, потому что мне сказали, что установление переходных процессов часто довольно дорого, а также постоянное обновление базы данных кажется плохим.

Были ли какие-либо изменения? Есть ли лучший способ проверить, находится ли (не текущий) пользователь в сети?

Как is_user_logged_in() простая функция is_user_logged_in() для текущего пользователя, но до сих пор нет возможности проверить других? Разве нет какого-то флага или чего-то еще?

WordPress не отслеживает, находится ли пользователь в сети. Он может знать только, находится ли ток в сети, что всегда да (иначе запроса не было бы). Если вы хотите узнать, находится ли другой пользователь, который не является текущим пользователем, эта информация не существует, и вам нужно будет ее реализовать самостоятельно.

is_user_logged_in проверяет, является ли текущий пользователь аутентифицирован aka вошел в систему, это не тест, если пользователь в сети

Для этого вам также придется идти на компромиссы, а в режиме реального времени в режиме онлайн или не отслеживать статус – это не то, что вы можете делать только в WordPress.

Ваши варианты включают:

  • Обновление временной метки каждый раз, когда вы получаете доступ к странице в метателе пользователя, а затем используя эту метку времени в качестве теста (например, если временная метка пользователей в течение последних 5 минут учитывает их в Интернете), попросите AJAX позвонить на ваш сайт, чтобы обновить таймер. Обратите внимание, что если пользователь закрывает свой браузер сразу после загрузки страницы, они все равно будут отображаться в Интернете в течение 5 минут, и для этого есть производительность, она не будет масштабироваться с трафиком
  • Наличие флага, указывающего на то, что пользователь подключен к сети, и установить его значение true, когда пользователь нажимает на любую страницу. Задайте задание cron, которое равномерно устанавливает все флаги в false. Это будет дешевле запрашивать, но это дороже для запуска. Вы можете сделать его менее дорогостоящим, увеличив время задержки работы cron, тем самым снижая точность. Это по-прежнему приводит к более дорогостоящим входам пользователей, так как каждая загрузка страницы включает в себя запись в базу данных. Он не будет масштабироваться с трафиком.
  • Используйте внешнюю службу и настройте сервер Heroku / Simperium / Node, который не зависит от WordPress и отслеживает состояние онлайн. Как вы это сделаете, это выходит за рамки этого сайта, так как вы переходите в другие области знаний вне WordPress. Это самый сложный и дорогой вариант, но это означает, что ваша установка WordPress не оказывает негативного влияния. Это означает, что данные онлайн-присутствия недоступны в самом WordPress, вы не сможете запросить, если вы не создадите механизмы для этого, которые будут дорогими. Код, который делает зеленый значок, должен быть в javascript в браузере. Однако самый худший сценарий заключается в том, что логика вашего присутствия не работает, поскольку ваш внешний сервер прячется под нагрузкой, но ваш сайт WordPress больше не имеет записи БД при каждой загрузке страницы, а ваш сайт лучше работает с трафиком, чем другие параметры

В целом, то, что вы просите, является нетривиальным, и, хотя звучание простое, будет либо очень тяжелым, неточным, либо потребует дополнительного сервера и времени разработки. Есть компромисс.

Кроме того, любое решение, которое вы разрабатываете в PHP, обязательно будет означать, что вы больше не сможете выполнять полные кеши страниц, если онлайновая автономная функция не включена в javascript. В противном случае, если вы показываете кого-то в режиме онлайн, и ваши страницы будут кэшироваться в течение 24 часов, они будут оставаться в сети в течение следующих 24 часов. Если вы используете один из первых двух вариантов, которые я представил, вы также не сможете использовать кеширование для зарегистрированных пользователей, а такие инструменты, как batcache или Varnish, будут разбивать вашу систему, если они применяются к этим пользователям, если не используется система на основе AJAX указать, что кто-то в сети

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