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;
où $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:
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 ??!
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 );