首页 > 解决方案 > 访问页面时间隔后调用函数

问题描述

正如标题所说,我想在每次访问页面时调用一个函数,但前提是已经过了特定的时间间隔。

更准确地说:一个用户访问该页面并调用该函数。x 分钟后,当第一个用户访问该页面时,再次调用该函数(无论是否或有多少用户访问了该页面,或者经过了多长时间,如果至少有 x 分钟)。

我正在使用 Wordpress,我的函数在 functions.php 中

来自网站的特定页面正在调用该函数。

我试图在我的functions.php中放置一个计时器来调用该函数,但它破坏了我的网站或让它永远加载(我尝试了多种代码和变体)

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

我认为另一种方法是检查时间(服务器时间或设置时区date_default_timezone_set('UTC');)并在特定时间(IE:xx:00,xx:30)之后调用该函数,但这需要检查之前是否调用过该函数。

标签: phpjquerywordpress

解决方案


为此,您可以使用 Wordpress 临时 API ( https://codex.wordpress.org/Transients_API )。瞬态是一段带有超时的临时键值数据。在每次页面加载时,您都会测试您的瞬态是否存在。如果没有,请将其设置为 x 分钟到期(或您想要的任何到期时间)并执行您的代码。如果其他用户在过期时间内访问该页面,瞬态仍然存在,代码不会被执行:

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 cron ( https://developer.wordpress.org/plugins/cron ) 一样。这也可以用于相同的确切目的 - 只是使用哪一个的偏好问题。


推荐阅读