Я бы использовал хук before_delete_post
в качестве последнего уровня защиты от удаления (используя решение @ tf, и это правильный ответ).
И сначала уберите опции «Удалить» из поля зрения. Следующее скрывает « Массовые действия» и кнопку « Очистить корзину» и удаляет действие Удалить строку навсегда.
С этим кодом:
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 );
function hide_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;
}
Это результат:
Интересная записка
Там нет крючка cpt_row_actions
. Крючки page_row_actions
и post_row_actions
будут применяться , если пост типа является иерархическим или нет , соответственно.