删除具有特定挂钩的所有计划事件

时间:2012-01-21 作者:Stephen Harris

我有几个cron作业都连接到同一个挂钩,但每个作业都有不同的参数(post ID)。它出现了wp_clear_scheduled_hook 仅清除与传递的参数匹配的作业(如果未提供参数,则清除没有任何参数的作业)。

有没有一种方法可以删除与挂钩关联的所有cron作业,而不考虑作业的参数?(无需通过循环ID“手动”执行)。

似乎有答案被删除了!为了澄清我想要实现的目标:每个帖子都有一个截止日期,我想在这个日期之后删除帖子。

(另一种选择是让一个cron作业每24小时重复一次,删除所有过期的帖子)。

然而,我决定为每个帖子创建一个一次性的工作,但似乎你不能一次删除所有的工作而不循环浏览它们。

2 个回复
最合适的回答,由SO网友:Jason Rikard 整理而成
SO网友:Hameedullah Khan

我刚刚快速编写了以下函数,它将清除指定钩子的所有cron,而不考虑cron时间和钩子参数。

注:我有NOT TESTED 功能,因此请不要在您的live站点上运行它。

function wpse39681_clear_all_crons( $hook ) {
    $crons = _get_cron_array();
    if ( empty( $crons ) ) {
        return;
    }
    foreach( $crons as $timestamp => $cron ) {
        if ( ! empty( $cron[$hook] ) )  {
            unset( $crons[$timestamp][$hook] );
        }

        if ( empty( $crons[$timestamp] ) ) {
            unset( $crons[$timestamp] );
        }
    }
    _set_cron_array( $crons );
}
Related: http://core.trac.wordpress.org/ticket/18997

结束