Supprimer tous les événements planifiés avec un hook particulier

8

J'ai plusieurs tâches cron toutes accrochées au même crochet, mais chacune avec un argument différent (un ID de poste). Il apparaît wp_clear_scheduled_hookuniquement efface le travail qui correspond à l'argument passé avec lui (ou les travaux sans aucun argument, si aucun argument n'est fourni).

Existe-t-il un moyen de supprimer tous les travaux cron associés à un hook, quel que soit l'argument de ce travail? (Sans le faire «manuellement» en parcourant les ID).


Semble une réponse a été supprimée! Pour clarifier ce que j'aimerais réaliser: chaque article a une date d'expiration - et je voudrais supprimer l'article après cette date.

(Une autre option consiste à avoir une tâche cron - répétée toutes les 24 heures qui supprime tous les messages expirés).

Cependant, j'ai décidé de créer un travail unique pour chaque poste - mais il semble que vous ne pouvez pas supprimer tous les travaux à la fois sans les parcourir.

Stephen Harris
la source

Réponses:

10

Je viens d'écrire rapidement la fonction ci-dessous, elle effacera tous les crons pour le hook spécifié, indépendamment du temps de cron et de l'argument hook.

REMARQUE: Je n'ai PAS TESTÉ la fonction, donc ne l'exécutez pas sur votre site en direct.

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

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

Hameedullah Khan
la source
Merci Hameedullah. J'ai décidé de choisir l'option alternative, car c'est ainsi que WordPress supprime les anciens messages supprimés. Je n'ai pas testé votre fonction, mais elle a l'air correcte et ferait l'affaire. Merci encore.
Stephen Harris