可以在30到60分钟之间随机启动WP-Cron吗?
我有什么
collectstatic
答案 0 :(得分:5)
不幸的是,wp_schedule_event没有30分钟,只接受这些间隔:每小时,每天两次(12H),每天(24小时)。
在我看来,有一个可以随机改变的预定事件有点奇怪,可能你应该看一下不同的实现。 如果不讨论你的选择,我将提供一个可能的答案。
有一些带有挂钩的插件进入Wordpress cron系统,允许不同的时间间隔。
一种解决方案是每30分钟只设置一个cron并具有随机执行或不执行的自定义功能。
if (rand(0,1)) { ....
例如:
问题是强制执行1小时(1次跳过后),因为你最终可以跳过超过+ 30分钟。这可以通过存储上次执行的值来实现。
另一个解决方案是几乎在同一时间内有2个cron(30分钟和1个小时)并且具有自定义功能,如果1小时未运行则会触发30分钟等等。
这是一个很好的Wordpress cronjob plugin 如果您需要在Wordpress表中安全地存储cron执行,您可以使用Wordpress add_option function,使用get_option和update_option来获取并更新其值。
答案 1 :(得分:1)
在下面的代码中,我将使用激活挂钩代替wp
挂钩,如果它是您的代码所在的主题,请随时使用after_switch_theme
... < / p>
您可以使用wp_schedule_single_event()
,只需添加一个事件,每次事件发生后在30-60分钟内随机发生;)
/**
* Registers single event to occur randomly in 30 to 60 minutes
* @action activation_hook
* @action my_awesome_event
*/
function register_event() {
$secs30to60min = rand( 1800, 3600 ); // Getting random number of seconds between 30 minutes and an hour
wp_schedule_single_event( time() + $secs30to60min, 'my_awesome_event' );
}
// Register activation hook to add the event
register_activation_hook( __FILE__, 'register_event' );
// In our awesome event we add a event to occcur randomly in 30-60 minutes again ;)
add_action( 'my_awesome_event', 'register_event' );
/**
* Does the stuff that needs to be done
* @action my_awesome_event
*/
function do_this_in_awesome_event() {
// do something
}
// Doing stuff in awesome event
add_action( 'my_awesome_event', 'do_this_in_awesome_event' );