我正在为一个客户建立一个网站,要求在不同的日期发送关于每个帖子的电子邮件(即帖子发布前两周,然后在帖子发布后四周,等等)。看来最好的方法是wp_schedule_single_event() 具有唯一的事件名称,但我不太确定如何正确调用add_action 在这些单一事件上each event has a unique name.
我正在安排这样的活动:
add_action(\'wp_insert_post\', \'cron_emails\');
function cron_emails() {
global $post;
$meta = get_post_custom($post->ID);
// one day before event
wp_clear_scheduled_hook("one_day_before_event_" . $post->ID);
if(!empty($meta["_start-date"][0])) {
$newdate = strtotime ( \'-1 day\' , strtotime ( $meta["_start-date"][0] ) );
wp_schedule_single_event($newdate, "one_day_before_event_" . $post->ID);
}
}
这将安排具有唯一名称的单个事件
one_day_before_event_[POST_ID]. 效果很好,没有投诉。但是现在,当cron运行时,如何通过add\\u操作触发这个独特的事件?我真的不明白当每个帖子都有一个唯一的事件名称时,如何动态地执行add\\u操作,如下所示:
add_action(\'one_day_before_event_[POST_ID]\',\'some_function\');
我能想到的两个选项是(1)循环浏览博客上的每个帖子id,或(2)只调用single上的操作。php具有:
is(is_single()) add_action(\'one_day_before_event_\' . $post->ID, \'some_function\');
对于如何为唯一的事件名称动态调用add\\u操作,有谁有更好的想法吗?
最合适的回答,由SO网友:Rob Vermeer 整理而成
您可以将参数传递给wp\\u schedule\\u single\\u event函数:
wp_schedule_single_event($newdate, "one_day_before_event", array($post->ID));
然后,如果执行add\\u操作,您可以说出它将接收多少个参数(在本例中为1)。
add_action( \'one_day_before_event\', \'some_function\', 10, 1 );
然后在函数中可以访问变量:
function some_function($post_id) {
// Do something with $post_id
}