Pour un problème d'audit, je souhaite seulement qu'un message puisse être supprimé, mais pas supprimé - pour tous les utilisateurs.
J'ai donc un plugin comme
add_action('before_delete_post', function($id) {
wp_die(0);
});
Mais semble ne pas toutes les actions de suppression sont ajax, donc il sera afficher un écran noir avec retourner une page d'erreur avec le résultat "0"
En ce qui concerne les fonctionnalités, le code ci-dessus est correct, mais existe-t-il un meilleur moyen?
Ne laissez pas l'action mourir, faites simplement une redirection (où que vous soyez):
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);
J'utiliserais le hook before_delete_post
comme dernière couche de protection contre la suppression (en utilisant la solution de @ tf et la réponse correcte).
Et supprimez d’abord les options "Supprimer". Ce qui suit masque l'action Actions en bloc et le bouton Vider la corbeille , et supprime l'action Supprimer définitivement ligne.
Avec ce 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 "<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;
}
Voici le résultat:
Il n'y a pas de hook cpt_row_actions
. Les crochets page_row_actions
et post_row_actions
sont appliqués si le type de publication est hiérarchique ou non , respectivement.