web-dev-qa-db-fra.com

Vérifier si l'utilisateur peut supprimer un message donné

J'ai rencontré ce problème où le code suivant renvoie toujours la valeur true pour tout post ID qui lui est fourni.

current_user_can('delete_posts', $post_id);

Normalement, le code ci-dessus doit renvoyer la valeur false lorsque l'utilisateur n'est pas l'auteur de la publication ou n'a pas la capacité de supprimer d'autres publications. Cependant, il reste toujours vrai pour n'importe quel post ID.

Un rôle personnalisé a été attribué à l'utilisateur, comme défini ci-dessous.

$standard_role_capabilities = array ('read'                 => true,
                                    'delete_posts'              => true,
                                    'edit_posts'                => true,
                                    'delete_published_posts'    => true,
                                    'publish_posts'             => true,
                                    'edit_published_posts'      => true,
                                    'comment'                   => true
                            );

add_role('standard', 'Standard', $standard_role_capabilities);

Des raisons pour que cela ne fonctionne pas?

1
John

Après des heures de lutte pour que cela fonctionne, il suffisait de changer delete_posts en delete_post.

Donc, dans son intégralité, ce serait:

current_user_can('delete_posts', $post_id);

à

current_user_can('delete_post', $post_id);

current_user_can accepte un deuxième paramètre. Bien que cela soit étrange que la déclaration de fonction dans capabilities.php ne définisse pas un deuxième paramètre comme indiqué par @amit. Peut-être que quelqu'un peut expliquer pourquoi il en est ainsi.

3
John

Si vous souhaitez vérifier si l'utilisateur peut supprimer les publications d'autres auteurs, vous devez utiliser la fonctionnalité appropriée - delete_others_posts.

1
Mamaduka

MODIFIER -

Il y a une autre fonction author_can () qui acceptera le post-ID.

La fonction current_user_can() accepte seulement un paramètre , nous ne pouvons pas lui transmettre l'identifiant de la publication.

Paramètres -

$capability
(string) (required) capability
Default: None

Exemple -

Peut-être que ce n'est pas la meilleure façon de réaliser ce que vous cherchez -
Dans le code ci-dessous, le bloc if ne sera exécuté que si l'utilisateur actuel est author de ce message et a la capacité - delete_posts

<?php

    $current_user = wp_get_current_user();
    $author = get_the_author_meta('ID');

    if ( current_user_can('delete_posts') && ( $current_user->ID == $author ) ) {
        //  when current user is author with `delete_posts` capability
    }

?>

Mettre à jour -

Autoriser l'utilisateur à supprimer ses propres publications, mais interdire la suppression des autres publications.
Si la suppression est basée sur l'auteur du message, un administrateur ne pourra pas le supprimer même s'il dispose des privilèges.

Changer la déclaration if en quelque chose comme ça -

    if ( current_user_can('activate_plugins') || ( $current_user->ID == $author ) ) 
    {
        //  when current user is author or admin
    }
0
amit