Dica de PHP · publicada em
Um padrão comum em WordPress é adicionar um filtro temporário, fazer a operação e remover o filtro no fim. Se a operação lançar exceção, a linha de remoção nunca executa — e o filtro fica ativo para o resto da requisição, causando efeito colateral em outro lugar.
O bloco finally resolve: ele executa aconteça o que acontecer, com ou sem exceção, inclusive quando há return dentro do try.
Use para tudo que é par de abre e fecha: filtro temporário, lock de arquivo, transação de banco, ob_start com ob_get_clean, e restauração de $wpdb->show_errors.
add_filter('wp_insert_post_data', $meu_ajuste);
try {
$id = wp_insert_post($dados, true);
if (is_wp_error($id)) { throw new RuntimeException($id->get_error_message()); }
return $id;
} finally {
remove_filter('wp_insert_post_data', $meu_ajuste); // roda sempre
}
Na prática: todo par abre/fecha (filtro, lock, buffer) vai com finally. Senão vaza em caso de exceção.