Вызывать функцию через определенный промежуток времени при обращении к странице - PullRequest
0 голосов
/ 07 апреля 2020

Как видно из заголовка, я хочу вызывать функцию каждый раз, когда к странице обращаются, но только если прошел определенный интервал c.

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

Я использую Wordpress, и моя функция в функциях. php

Специальная страница c с веб-сайта вызывает функцию.

Я пытался установить таймер в моем функции. php для вызова функции, но она ломает мой сайт или заставляет его загружаться вечно (я пробовал несколько кодов и вариантов)

$status=TRUE;
do { 
   myFunction(){
      //code here
   }
   sleep(60); //Sleep 60 seconds
} while($status==TRUE);

Я думаю, что другой метод - это проверить время (время сервера или установите часовой пояс date_default_timezone_set('UTC');) и вызовите функцию через определенное время c (IE: xx: 00, xx: 30), но для этого потребуется проверить, была ли функция вызвана ранее.

1 Ответ

0 голосов
/ 07 апреля 2020

Для этой цели вы можете использовать переходный API Wordpress (https://codex.wordpress.org/Transients_API). Переходный процесс - это фрагмент временных данных значения ключа с тайм-аутом. На каждой загрузке страницы вы проверяете, существует ли ваш переходный процесс. Если нет, установите его с истечением х минут (или с любым другим желаемым временем) и выполните свой код. Если другой пользователь посещает страницу в течение срока действия, переходный процесс все еще там, и код не будет выполнен:

define('TRANSIENT_MY_INTERVAL'); // 5 minute interval for expiration

add_action('wp_loaded', 'do_this_regularly');

function do_this_regularly()
{
  $trans_timeout = 5 * MINUTE_IN_SECONDS; // define your timeout here
  $trans_lock = get_transient('my_transient_lock');
  if (! $trans_lock) { // will be false if expired or not set
    set_transient('my_transient_lock', true, $trans_timeout); // set the lock

    // <- perform your every x minutes action here!
  }
}

Этот код будет выполняться, только если люди действительно посещают страницу, как с WP крон (https://developer.wordpress.org/plugins/cron). Это также может быть использовано для той же самой конкретной цели - просто вопрос предпочтения, какой из них использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...