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.

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.