Excluir todos os eventos agendados com um gancho específico

8

Eu tenho vários trabalhos cron todos conectados ao mesmo gancho, mas cada um com um argumento diferente (um ID de postagem). Aparece wp_clear_scheduled_hookapenas limpa a tarefa que corresponde ao argumento passado com ela (ou tarefas sem argumentos, se nenhum argumento for fornecido).

Existe uma maneira de excluir todos os trabalhos cron associados a um gancho, independentemente do argumento desse trabalho? (Sem fazer isso 'manualmente', percorrendo os IDs).


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

(Uma opção alternativa é ter um trabalho cron - repetindo a cada 24 horas que exclui as postagens expiradas).

No entanto, decidi criar um trabalho único para cada postagem - mas parece que você não pode excluir todos os trabalhos de uma só vez sem percorrê-los.

Stephen Harris
fonte

Respostas:

10

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

NOTA: Eu não testei a função; portanto, não a execute no site ativo.

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
fonte
Obrigado Hameedullah. Decidi optar pela opção alternativa, pois é assim que o WordPress exclui as postagens antigas da lixeira. Não testei sua função, mas ela parece correta e faria o trabalho. Obrigado novamente.
Stephen Harris