我正在尝试使用具有动态生成的操作名称的 WordPress Cron API 来安排多个事件。一次只能添加一个事件,add_action()
但不能超过一个。
使用名为Cron View的插件,我可以确认事件已注册,但未以某种方式调用该函数。我猜可能动态生成的动作名称在下一页加载中消失了,所以 WordPress 找不到它们。我不知道。
以下代码已准备好作为插件运行并演示了该问题。任何解决此问题的建议将不胜感激。
<?php
/* Plugin Name: Sample Cron Scheduler */
add_action('admin_menu', 'sample_cron_menu');
function sample_cron_menu() {
add_options_page(
'Sample Cron Scheduler',
'Sample Cron Scheduler',
'manage_options',
'sample_cron_scheduler',
'sample_cron_scheduler_admin');
}
function sample_cron_scheduler_admin() {
?>
<div class="wrap">
<?php
// print the saved values
echo '<h3>Saved values</h3>';
print_r(get_option('crontest'));
// do this ten times, meaning I want to register 10 events
$chars = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
for ($i=1; $i <= 10; $i++) {
// generate a random string
shuffle($chars);
$randomstring = implode($chars);
// schedule the next event
// wp_schedule_single_event(time(), 'myeventaction'); // <-- this only runs one job
add_action(sha1($randomstring),'myevent'); // so I want to add arbitrary multiple events but this doesn't work
wp_schedule_single_event(time(), sha1($randomstring));
}
?>
</div>
<?php
}
add_action('myeventaction', 'myevent');
function myevent() { // this function just adds the current time to the option array
$arr = get_option('crontest') ? get_option('crontest') : array();
array_push($arr, date("M d Y H:i:s", time())); // adds the current time at the end of the array
array_splice($arr, 0, count($arr) - 20); // reduce the number of elements to 20 to make it short
update_option('crontest', $arr);
}