Wie kann verhindert werden, dass ein Beitrag gelöscht wird?

Bei Auditing-Problemen möchte ich nur, dass ein Beitrag gelöscht, aber nicht gelöscht wird – für alle Benutzer.

Also ich habe ein Plugin wie

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

Aber scheint nicht alle löschen Aktion sind AJAX, so wird es einen schwarzen Bildschirm mit einer Fehlermeldung mit Ergebnis “0” zeigen

Feature weise der obige Code ist ok, aber gibt es einen besseren Weg?

Solutions Collecting From Web of "Wie kann verhindert werden, dass ein Beitrag gelöscht wird?"

Lassen Sie die Aktion nicht abbrechen, machen Sie einfach eine Weiterleitung (wohin Sie möchten):

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

Ich würde den Hook before_delete_post als letzte Schicht des Schutzes gegen das Löschen verwenden (mit Hilfe der @ tf-Lösung, und das ist die richtige Antwort).

Und entfernen Sie zuerst die “Löschen” -Optionen aus dem Blickfeld. Im Folgenden werden die Aktionen Bulk Actions und Empty Trash ausgeblendet und die Zeilenaktion Delete Permanently wird entfernt.

Vor

Mit diesem Code:

 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 ""; } } function hide_row_action_wpse_92155( $actions, $post ) { if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) unset( $actions['delete'] ); return $actions; } 

Dies ist das Ergebnis:

nach

Hinweis von Interesse

Es gibt keinen Haken cpt_row_actions . Die Hooks page_row_actions und post_row_actions werden angewendet, wenn der Post-Typ hierarchisch ist oder nicht .