php - 访问页面时间隔后调用函数
问题描述
正如标题所说,我想在每次访问页面时调用一个函数,但前提是已经过了特定的时间间隔。
更准确地说:一个用户访问该页面并调用该函数。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)之后调用该函数,但这需要检查之前是否调用过该函数。
解决方案
为此,您可以使用 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 ) 一样。这也可以用于相同的确切目的 - 只是使用哪一个的偏好问题。
推荐阅读
- c# - ZeroMQ 与 .net 核心一起使用
- c# - Razor 页面内当前登录的用户属性访问
- xamarin.ios - NSAttributedString 方法返回 Nil
- nsattributedstring - 超级/下标似乎在 iOS13 中被破坏(NSAttributedString)
- c - 在 c 程序中给出意外的联合输出大小
- visual-studio-code - Visual Studio Code 和 AppleScript 的界限
- javascript - 在 Phaser 3 中对生成的形状使用 .setCollideWorldBounds()
- cassandra - 有没有办法在 Cassandra 分区的所有行中获得分数(使用 UDF)并带来分数最高的 10 个结果(ORDER BY)?
- android - 有没有办法在 Recycler View Adapter 类中检查 Fragment 的 onResume ?
- cocoalumberjack - 将 cocoalumberjack 更新到 3.6.0 后获取“在框架模块中包含非模块化标头”