web-dev-qa-db-fra.com

Comment empêcher un message d'être supprimé?

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?

8
Yoga

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

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.

before

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:

after

Note d'intérêt

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.

5
brasofilo