Eu usaria o gancho before_delete_post
como a última camada de proteção contra exclusão (usando a solução do @ tf e qual é a Resposta correta).
E primeiro remova as opções "Excluir" de vista. O seguinte oculta as Ações em massa e o botão Esvaziar lixeira e remove a ação de linha Excluir permanentemente .

Comestecódigo:
add_action('admin_head-edit.php','hide_delete_css_wpse_92155');add_filter('post_row_actions','hide_row_action_wpse_92155',10,2);add_filter('page_row_actions','hide_row_action_wpse_92155',10,2);functionhide_delete_css_wpse_92155(){if(isset($_REQUEST['post_status'])&&'trash'==$_REQUEST['post_status']){echo"<style>
.alignleft.actions:first-child, #delete_all {
display: none;
}
</style>";
}
}
function hide_row_action_wpse_92155( $actions, $post )
{
if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] )
unset( $actions['delete'] );
return $actions;
}
Este é o resultado:

Notadeinteresse
Nãoháganchocpt_row_actions
.Osganchospage_row_actions
epost_row_actions
são aplicado se o tipo de postagem for hierárquico ou não , respectivamente.