Überprüfen Sie, ob der Benutzer einen bestimmten Beitrag löschen kann

Ich bin auf dieses Problem gestoßen, wo das folgende Stück Code für jede post ID die an es geliefert wird, immer wahr zurückgibt.

current_user_can('delete_posts', $post_id);

Normalerweise sollte der obige Code false zurückgeben, wenn der Benutzer nicht der Autor des Posts ist oder nicht die Möglichkeit hat, andere Posts zu löschen. Für jede Post-ID wird jedoch weiterhin der Wert true zurückgegeben.

Dem Benutzer wurde eine benutzerdefinierte Rolle zugewiesen, wie unten definiert.

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

Irgendwelche Gründe dafür funktionieren nicht?

Solutions Collecting From Web of "Überprüfen Sie, ob der Benutzer einen bestimmten Beitrag löschen kann"

Nach stundenlangen Kämpfen, um dies zum delete_posts zu delete_post nur delete_posts in delete_post .

Also, in seiner Gesamtheit wäre das:

current_user_can('delete_posts', $post_id);

zu

current_user_can('delete_post', $post_id);

current_user_can akzeptiert einen zweiten Parameter. Obwohl es seltsam ist, dass die functionsdeklaration in captions.php keinen zweiten Parameter definiert, wie von @amit angegeben. Vielleicht kann jemand klären, warum es so ist.

Wenn Sie überprüfen möchten, ob Benutzer Beiträge anderer Autoren löschen können, müssen Sie die entsprechende function verwenden – delete_others_posts .

Bearbeiten –

Es gibt eine andere function author_can () , die Post-ID akzeptieren.

current_user_can() function current_user_can() akzeptiert nur einen Parameter , wir können die Post-ID nicht an sie übergeben.

Parameter –

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

Beispiel –

Vielleicht ist das nicht der beste Weg, um das zu erreichen, wonach Sie suchen –
Ich denke, im folgenden Code wird der if-Block nur dann ausgeführt, wenn der aktuelle Benutzer der author dieses Beitrags ist und über die Fähigkeit – 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 } ?> 

Aktualisierung –

Erlaube dem Nutzer, seine eigenen Beiträge zu löschen, aber das Löschen anderer Beiträge zu verbieten.
Wenn die Löschung auf dem Postautor basiert, kann ein Administrator den Post nicht löschen, obwohl der Administrator über die entsprechenden Berechtigungen verfügt

Ändere die if-statement in etwa so –

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