current_user_can (‘edit_post’, $ post_id) funktioniert nicht für den Contributor, sondern für den Administrator

Ich habe einen benutzerdefinierten Post-Typ mit dem Namen ÷ Projekt ÷, der 'capability_type' => 'post' während er sich mit ÷ register_post_type registering registriert.

In meinen Theme-Dateien und auch in der Datei functions.php habe ich Situationen, in denen ich prüfen sollte, ob das zu bearbeitende Projekt vom Benutzer erstellt wurde oder nicht. also benutze ich das:

 if ( !current_user_can( 'edit_post', $porject_id ) ) return; 

Dabei ist $project_id die Post-ID des zu bearbeitenden Projekts. Ich habe zum Beispiel eine Seitenvorlage mit dem Namen single_project.php wo ich einzelne Beiträge im Projektposttyp für Benutzer single_project.php kann und ich möchte, dass diese Personen die einzelnen Seiten des Projekts sehen können:

  1. Administratoren
  2. Redakteure
  3. der Beitragende (Autor)

aber mit dem oben genannten Code, es ist in Ordnung mit Administratoren und Redakteuren, während nicht für die Beitragszahler selbst!

Wenn ich var_dump( current_user_can( 'edit_post', $project_id ) ) mit dem contributor-eingeloggten Konto verwende, gibt es false , während var_dump( current_user_can( 'edit_posts' ) ) (mit trailing 's' ) true zurückgibt (aber für jeden Post, nicht nur für ihn).

Irgendwelche Hilfe bei diesem ??!

Solutions Collecting From Web of "current_user_can (‘edit_post’, $ post_id) funktioniert nicht für den Contributor, sondern für den Administrator"

Mit map_meta_cap ich den Benutzer mit map_meta_cap mit edit_post

 function wp3344_map_meta_cap( $caps, $cap, $user_id, $args ){ if ( 'edit_post' == $cap ) { $post = get_post( $args[0] ); $post_type = get_post_type_object( $post->post_type ); $caps = array(); if ( $user_id == $post->post_author ) $caps[] = $post_type->cap->edit_posts; else $caps[] = $post_type->cap->edit_others_posts; } return $caps; } add_filter( 'map_meta_cap', 'wp3344_map_meta_cap', 10, 4 );