Elimina tutti gli eventi programmati con un hook particolare


8

Ho diversi lavori cron tutti collegati allo stesso hook, ma ognuno con un argomento diverso (un ID post). Sembra wp_clear_scheduled_hookcancellare solo i lavori che corrispondono all'argomento passato con esso (o lavori senza alcun argomento, se non viene fornito alcun argomento).

C'è un modo per eliminare tutti i lavori cron associati a un hook, indipendentemente dall'argomento che ha il lavoro? (Senza farlo "manualmente" eseguendo il ciclo tra gli ID).


Sembra che una risposta sia stata cancellata! Per chiarire cosa vorrei ottenere: ogni post ha una data di scadenza - e vorrei eliminare il post dopo questa data.

(Un'opzione alternativa è quella di avere un cron job - ripetendo ogni 24 ore che elimina tutti i post scaduti).

Tuttavia, ho deciso di creare un lavoro unico per ogni post, ma sembra che non sia possibile eliminare tutti i lavori contemporaneamente senza spostarli.

Risposte:



10

Ho appena scritto la seguente funzione, cancellerà tutti i croni per l'hook specificato, indipendentemente dal tempo cron e dall'argomento hook.

NOTA: NON HO TESTATO la funzione, quindi per favore non eseguirla sul tuo sito 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 );
}

Correlato: http://core.trac.wordpress.org/ticket/18997


Grazie Hameedullah. Ho deciso di scegliere l'opzione alternativa, poiché è così che WordPress elimina i vecchi messaggi spazzati. Non ho testato la tua funzione, ma sembra giusto e farebbe il lavoro. Grazie ancora.
Stephen Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.