Удалить все запланированные события с определенным хуком

8

У меня есть несколько заданий cron, все они привязаны к одному и тому же крючку, но у каждого свой аргумент (идентификатор записи). Похоже, очищаются wp_clear_scheduled_hookтолько задания, которые соответствуют аргументу, переданному с ним (или заданиям без аргументов, если аргумент не предоставлен).

Есть ли способ удалить все задания cron, связанные с ловушкой, независимо от аргумента этого задания? (Не делая это «вручную», просматривая идентификаторы).


Кажется, ответ был удален! Чтобы уточнить, чего я хотел бы достичь: у каждого поста есть дата истечения срока действия - и я хотел бы удалить пост после этой даты.

(Альтернативный вариант - иметь одно задание cron - повторять каждые 24 часа, удаляя все сообщения с истекшим сроком).

Тем не менее, я решил создать одноразовое задание для каждого поста, но кажется, что вы не можете удалить все задания сразу, не просматривая их.

Стивен Харрис
источник

Ответы:

10

Я только что быстро написал приведенную ниже функцию, она очистит все кроны для указанного хука, независимо от времени хрона и аргумента хука.

ПРИМЕЧАНИЕ. Я НЕ ПРОВЕРИЛ эту функцию, поэтому не запускайте ее на своем сайте.

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 );
}

Связанный: http://core.trac.wordpress.org/ticket/18997

Хамидулла Хан
источник
Спасибо, Хамидулла. Я решил пойти с альтернативным вариантом, так как именно так WordPress удаляет старые потерянные сообщения. Я не проверял вашу функцию, но она выглядит правильно и сделает эту работу. Еще раз спасибо.
Стивен Харрис