英文:
How to pass arguments in cron job function
问题
我是WordPress中的新手,对PHP和cron一无所知。因此,我有一个任务。我需要从表单中获取数据并将其放入cron函数中。
这是我的代码。我在WordPress管理面板中创建了自定义插件页面,并尝试运行这段代码。
实际上,如果我输入文章ID而不是变量$post_id,则代码可以正常工作。
function cron_add_one_minute( $schedules ) {
$schedules['one_minute'] = array(
'interval' => 60,
'display' => '每一分钟'
);
return $schedules;
};
if(!empty($_POST) && ($_POST['btnaup']) && !wp_next_scheduled( 'update_post' )) {
wp_schedule_event( time(), 'one_minute', 'update_post');
}
if(isset( $_POST['btnaup'])) {
$post_id = $_POST['id'];
$b = $_POST['days'];
}
add_action( 'update_post', 'update_my_post', 10, 1);
function update_my_post( $post_id ){
$time = current_time('mysql');
wp_update_post( array (
'ID' => $post_id,
'post_date' => $time,
'post_date_gmt' => get_gmt_from_date( $time ),
'post_modified' => $time,
'post_modified_gmt' => get_gmt_from_date($time),
) );
}
英文:
Im totaly new in wordpress php and cron. So, I have a task. I need to take data from a form and put it into a cron function.
This is me code. I created custom plugin page in wordpress admin panel and try to run this code.
actually the code works if I enter a article id instead of a variable $post_id;
function cron_add_one_minute( $schedules ) {
$schedules['one_minute'] = array(
'interval' => 60,
'display' => 'One in minute'
);
return $schedules;
};
if(!empty($_POST) && ($_POST['btnaup']) && !wp_next_scheduled( 'update_post' )) {
wp_schedule_event( time(), 'one_minute', 'update_post');
}
if(isset( $_POST['btnaup'])) {
$post_id = $_POST['id'];
$b = $_POST['days'];
}
add_action( 'update_post', 'update_my_post', 10, 1);
function update_my_post( $post_id ){
$time = current_time('mysql');
wp_update_post( array (
'ID' => $post_id,
'post_date' => $time,
'post_date_gmt' => get_gmt_from_date( $time ),
'post_modified' => $time,
'post_modified_gmt' => get_gmt_from_date($time),
) );
}
答案1
得分: 0
根据文档中对于wp_schedule_event
的说明,第四个参数,您目前没有使用,是$args
包含要传递给钩子回调函数的参数的数组。数组中的每个值都作为独立的参数传递给回调函数。
数组键将被忽略。
默认值:array()
这意味着您应该能够使用以下代码:
if (!empty($_POST) && ($_POST['btnaup']) && !wp_next_scheduled('update_post')) {
$data = [
$_POST['id'],
];
wp_schedule_event(time(), 'one_minute', 'update_post', $data);
}
然后您的update_my_post
函数应该可以正常工作。
英文:
Per the docs for wp_schedule_event
, the fourth parameter, which you are 't currently using, is $args
> Array containing arguments to pass to the hook's callback function. Each value in the array is passed to the callback as an individual parameter.
>
> The array keys are ignored.
>
> Default: array()
This means you should be able to use:
if (!empty($_POST) && ($_POST['btnaup']) && !wp_next_scheduled('update_post')) {
$data = [
$_POST['id'],
];
wp_schedule_event(time(), 'one_minute', 'update_post', $data);
}
Your update_my_post
function should just work then.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论