web-dev-qa-db-fra.com

current_user_can ('edit_post', $ post_id) ne fonctionne pas pour contributer mais pour administrateur

J'ai un type de message personnalisé nommé ÷ projet qui a 'capability_type' => 'post' lors de l'enregistrement en utilisant ÷ register_post_type.

dans mes fichiers de thème et également dans le fichier functions.php, il arrive que je vérifie si le projet à modifier est créé par l'utilisateur ou non. alors j'utilise ceci:

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

$project_id est l'identifiant du projet à modifier. Par exemple, j'ai un modèle de page nommé single_project.php dans lequel je peux montrer aux utilisateurs des publications uniques dans le type de publication du projet et je veux que ces personnes puissent voir chaque page du projet:

  1. les administrateurs
  2. éditeurs
  3. le contributeur (post auteur)

mais en utilisant le code ci-dessus, ça va avec les administrateurs et les éditeurs, mais pas pour le contributeur lui-même!

lorsque j'utilise var_dump( current_user_can( 'edit_post', $project_id ) ) avec le compte contributeur connecté, il renvoie false, alors que var_dump( current_user_can( 'edit_posts' ) ) (avec le 's' suivant) renvoie true (mais pour chaque publication, pas seulement pour lui).

Toute aide pour ça ??!

3
Pmpr

en utilisant map_meta_cap J'ai ajouté edit_post par lettre à l'utilisateur

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 );
4
Pmpr