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?
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.
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
.
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
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
}
?>
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
}