Làm thế nào để ngăn chặn một bài viết bị xóa?


8

Đối với vấn đề kiểm toán, tôi chỉ muốn một bài đăng có thể được bỏ đi, nhưng không bị xóa - cho tất cả người dùng.

Vì vậy, tôi có một plugin như

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

Nhưng dường như không phải tất cả hành động xóa đều là ajax, vì vậy nó sẽ hiển thị màn hình đen với trả về trang lỗi với kết quả "0"

Tính năng khôn ngoan mã trên là ok, nhưng có cách nào tốt hơn?

Câu trả lời:


9

Đừng để hành động chết, chỉ cần thực hiện chuyển hướng (đến bất cứ nơi nào bạn muốn):

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);

Tôi đã biết, nhưng cách này hoạt động với các cuộc gọi AJAX và các yêu cầu XML-RPC? Tôi không nghĩ rằng trong những trường hợp này, chuyển hướng là giải pháp đúng đắn.
Andrea Sciamanna

5

Tôi sẽ sử dụng móc before_delete_postnhư là lớp bảo vệ cuối cùng chống lại việc xóa (sử dụng giải pháp của @ tf và đó là Câu trả lời đúng).

Và trước tiên, loại bỏ các tùy chọn "Xóa" khỏi tầm nhìn. Phần sau đây ẩn nút Hành động hàng loạt và nút Thùng rác và xóa hành động Xóa hàng vĩnh viễn .

trước

Với mã này:

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; 
}

Đây là kết quả:

sau

Lưu ý quan tâm

Không có móc cpt_row_actions. Các hook page_row_actionspost_row_actionsđược áp dụng nếu loại bài đăng có thứ bậc hoặc không , tương ứng.


Mkay. +1 cho cả bạn và @tf. Tôi không thể nâng cấp một lớp lót của anh ấy trước đây, bởi vì thông tin thêm đang chờ xử lý tôi chỉ có thể đánh giá chất lượng của nó bằng cách nghiên cứu thêm về chủ đề này. Một câu trả lời khác triệt để đưa vào bối cảnh.
Julian Pille
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.