我正在定制Wordpress插件,并做了一个简单的形式:
<form action="" method="post">
<input type="submit" name="button_update_products" value="Update">
</form>
...
...if (isset($_REQUEST['button_update_products'])) :
add_action('admin_head', function () {wp_schedule_single_event(time() + 50,'t_cron_now');});
add_action('t_cron_now', function () {...do something});
endif;当我运行这段代码并单击“更新”按钮时,Wordpress正在创建't_cron_now‘钩子,并以50秒的延迟对其进行调度。但是它没有将第二个函数附加到这个钩子上。我正在用Crontrol插件检查这种行为,这很奇怪。
但是,如果我稍微修改代码如下:
if (isset($_REQUEST['button_update_products'])) :
add_action('admin_head', function () {wp_schedule_single_event(time() + 50,'t_cron_now');});
endif;
add_action('t_cron_now', function () {...do something});一切正常。
创建t_cron_now钩子,并将函数附加到该钩子上。
我不知道为什么会发生这种事?为什么我要搬家:
add_action('t_cron_now', function () {...do something});在if之外(isset($_request‘按钮_update_products’)) :语句来完成这项工作?有人能理解我的这种行为吗?
发布于 2022-06-23 11:38:55
wp_schedule_single_event()调度只能在指定时间触发的钩子。
add_action()注册一个要在调用指定钩子时运行的操作,但它只为当前请求注册它。
因此,当按计划启动钩子的时间时,如果没有设置$_REQUEST['button_update_products'],那么它将不在请求中,除非您再次提交表单,WordPress将不会找到要触发的操作。
但是,如果在if语句之外添加它,WP将在每个页面请求上注册操作,并且只在计划触发时触发。
因此,只要调度程序在if语句中,就可以将其置于if语句之外。
https://stackoverflow.com/questions/72729271
复制相似问题