Exclui todos os eventos planejados com um gancho específico

8

Eu tenho vários cron jobs ligados ao mesmo hook, mas cada um com um argumento diferente (um post ID). Parece que wp_clear_scheduled_hook apenas limpa o trabalho que corresponde ao argumento transmitido com ele (ou trabalhos sem nenhum argumento, se nenhum argumento for fornecido).

Existe uma maneira de excluir todos os trabalhos cron associados a um gancho, independentemente do argumento que o trabalho tenha? (Sem fazer isso 'manualmente' fazendo um loop pelos IDs).

Parece que uma resposta foi excluída! Para esclarecer o que eu gostaria de alcançar: cada postagem tem uma data de expiração - e gostaria de excluir a postagem após essa data.

(Uma opção alternativa é ter um trabalho no cron - repetindo a cada 24 horas, excluindo as mensagens expiradas).

No entanto, decidi criar um trabalho único para cada postagem, mas parece que você não pode excluir todos os trabalhos de uma vez sem passar por eles.

    
por Stephen Harris 21.01.2012 / 17:29

1 resposta

10

Acabei de escrever rapidamente a função abaixo, ela irá limpar todos os crons para o gancho especificado, independentemente do tempo do cron e do argumento do gancho.

OBSERVAÇÃO: Eu tenho NÃO TESTADO a função, então, por favor, não a execute em seu site ao 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: enlace

    
por Hameedullah Khan 21.01.2012 / 18:49

Tags