Bagaimana mencegah agar posting tidak dihapus?

8

Untuk masalah audit, saya hanya ingin posting dapat dibuang, tetapi tidak dihapus - untuk semua pengguna.

Jadi saya punya plugin seperti

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

Namun sepertinya tidak semua aksi hapus ajax, sehingga akan ditampilkan layar hitam dengan mengembalikan halaman kesalahan dengan hasil "0"

Fitur bijaksana kode di atas ok, tetapi apakah ada cara yang lebih baik?

Yoga
sumber

Jawaban:

9

Jangan biarkan aksi itu mati, lakukan saja pengalihan (ke mana pun Anda mau):

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);
para pria
sumber
Tenang dulu, saya tahu, tapi bagaimana ini bekerja dengan panggilan AJAX dan permintaan XML-RPC? Saya tidak berpikir bahwa dalam kasus ini, pengalihan adalah solusi yang tepat.
Andrea Sciamanna
5

Saya akan menggunakan kait before_delete_postsebagai lapisan terakhir perlindungan terhadap penghapusan (menggunakan solusi @ tf, dan yang merupakan Jawaban yang benar).

Dan pertama-tama hapus opsi "Hapus" dari pandangan. Berikut ini menyembunyikan Tindakan Massal dan tombol Kosongkan Sampah , dan menghapus tindakan baris Hapus Secara Permanen .

sebelum

Dengan kode ini:

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

Ini hasilnya:

setelah

Catatan bunga

Tidak ada kait cpt_row_actions. Kait page_row_actionsdan post_row_actionsyang diterapkan jika jenis posting adalah hirarkis atau tidak , masing-masing.

brasofilo
sumber
Mkay. +1 untuk Anda dan @tf. Saya tidak bisa mengungguli one-liner-nya sebelumnya, karena informasi lebih lanjut yang tertunda saya hanya bisa menilai kualitasnya dengan penelitian lebih lanjut tentang masalah ini. Namun jawaban lain secara menyeluruh dimasukkan ke dalam konteks.
Johannes Pille