Eliminar todos los eventos programados con un enlace particular

8

Tengo varios trabajos cron todos enganchados al mismo gancho, pero cada uno con un argumento diferente (una ID de publicación). Parece que wp_clear_scheduled_hooksolo borra el trabajo que coincide con el argumento pasado con él (o trabajos sin ningún argumento, si no se proporciona ningún argumento).

¿Hay alguna forma de eliminar todos los trabajos cron asociados con un enlace, independientemente del argumento que tenga ese trabajo? (Sin hacerlo 'manualmente' recorriendo los ID).


Parece que se eliminó una respuesta! Para aclarar lo que me gustaría lograr: cada publicación tiene una fecha de vencimiento, y me gustaría eliminar la publicación después de esta fecha.

(Una opción alternativa es tener un trabajo cron, que se repite cada 24 horas y elimina las publicaciones caducadas).

Sin embargo, decidí crear un trabajo único para cada publicación, pero parece que no puedes eliminar todos los trabajos a la vez sin recorrerlos.

Stephen Harris
fuente

Respuestas:

10

Acabo de escribir rápidamente la siguiente función, borrará todos los crons para el gancho especificado, independientemente de la hora cron y el argumento de gancho.

NOTA: NO HE PROBADO la función, así que no la ejecute en su sitio en vivo.

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

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

Hameedullah Khan
fuente
Gracias Hameedullah Decidí optar por la opción alternativa, ya que así es como WordPress elimina las viejas publicaciones basura. No he probado su función, pero se ve bien y haría el trabajo. Gracias de nuevo.
Stephen Harris