每个帖子都有唯一的wp_Schedule_Single_Event()?

时间:2012-01-02 作者:Nick Budden

我正在为一个客户建立一个网站,要求在不同的日期发送关于每个帖子的电子邮件(即帖子发布前两周,然后在帖子发布后四周,等等)。看来最好的方法是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操作,有谁有更好的想法吗?

1 个回复
最合适的回答,由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
}

结束