Evitar a exclusão de blogs

4

Estou tentando impedir a exclusão de blogs em uma instalação do WordPress Multisite. Já existe um plugin que faz isso, mas usa wp_die() como a solução, que no meu cenário não funciona.

Ao selecionar vários blogs para exclusão em wp-admin / network, eu quero que o WordPress continue trabalhando e não morra na tentativa de excluir o primeiro no loop.

Eu tentei resolvê-lo assim como um plugin mu:

if(!$argv[1]) {

    add_action( 'delete_blog', 'prevent_blog_delete_wpse', 1, 2 );

    function prevent_blog_delete_wpse($blog_id, $drop = FALSE)
    {

        global $wpdb;
        $wpdb->query("update wp_blogs set deleted = 1 where blog_id = '".$blog_id."'");
        return FALSE;
    }
}

Portanto, se a exclusão for chamada por meio do navegador e a não CLI, apenas marcará o blog como excluído. Infelizmente isso não funciona. Eu também tentei mudar a prioridade de 1 para 99, ainda não funciona.

O motivo dessa solução é que eu tenho um cronjob separado que faz a exclusão real, mas primeiro cria um tarball dos arquivos sql tables e blogs.dir, caso eu precise restaurar.

Isso pode ser consertado hackeando wpmu_delete_blog() função do código principal, mas eu prefiro não fazer isso, já que ele irá quebrar na próxima atualização do WordPress.

    
por Tonny Jørgensen 29.07.2016 / 15:37

1 resposta

0

Você não pode parar qualquer coisa que não tenha uma opção explícita para ser interrompida. Nesse caso, as ações são um meio de executar algum código adicional no contexto de um caminho de execução específico e de não alterá-lo. Se não houver maneira de sinalizar para o processo parar, a única maneira é die() .

Se você pensar a partir de uma percepção lógica mais distante, não faz sentido que uma API de exclusão de blogs não exclua o blog. Se você precisar de algo como "fila para exclusão", basta gravar sua própria função e substituir os links de exclusão relevantes no administrador por links para sua operação.

    
por Mark Kaplun 12.04.2017 / 05:58