Как предотвратить удаление сообщения?

8

Что касается вопроса аудита, я хочу, чтобы сообщение можно было удалять, но не удалять - для всех пользователей.

Так что у меня есть плагин, как

add_action('before_delete_post', function($id) {
        wp_die(0);
    });

Но, похоже, не все действия удаления являются ajax, поэтому будет показан черный экран с возвратом страницы ошибки с результатом «0»

Функциональность приведенного выше кода в порядке, но есть ли лучший способ?

йога
источник

Ответы:

9

Не позволяйте действию умереть, просто сделайте перенаправление (куда хотите):

function wpse_92155_before_delete_post() {
    wp_redirect(admin_url('edit.php'));
    exit();
} // function wpse_92155_before_delete_post
add_action('before_delete_post', 'wpse_92155_before_delete_post', 1);
tfrommen
источник
Довольно старый, я знаю, но как это работает с вызовами AJAX и запросами XML-RPC? Я не думаю, что в этих случаях перенаправление является правильным решением.
Андреа Скиаманна
5

Я бы использовал хук 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будут применяться , если пост типа является иерархическим или нет , соответственно.

brasofilo
источник
Mkay. +1 и вам, и @tf. Я не мог отозвать его однострочник раньше, потому что до получения дополнительной информации я мог бы оценить ее качество только путем дальнейших исследований по этому вопросу. Еще один ответ тщательно изложен в контексте.
Йоханнес Пилле