Je suis en train de créer un site où il y aura plusieurs utilisateurs en tant qu'Auteur, le propriétaire ne veut pas que les auteurs puissent voir les messages de chacun, car il y a des méta-champs avec des informations qu'il préférerait ne pas avoir partagées entre les auteurs. .
Existe-t-il un moyen de supprimer la possibilité d'afficher les publications d'autres auteurs?
Merci Chuck
Pour clarifier un peu plus, ceci est pour le côté administrateur, en haut sous Posts, il y a des liens pour le mien, tous, et publiés. Je veux seulement que les auteurs voient "le mien".
Si vous souhaitez empêcher un utilisateur doté du rôle "Auteur" d'afficher les publications d'autres utilisateurs dans l'écran de synthèse (ils ne pourront pas afficher les détails de toute façon), vous pouvez ajouter un filtre supplémentaire sur l'auteur:
add_action( 'load-edit.php', 'wpse14230_load_edit' );
function wpse14230_load_edit()
{
add_action( 'request', 'wpse14230_request' );
}
function wpse14230_request( $query_vars )
{
if ( ! current_user_can( $GLOBALS['post_type_object']->cap->edit_others_posts ) ) {
$query_vars['author'] = get_current_user_id();
}
return $query_vars;
}
Les petits liens au-dessus de la table des messages ("Mine", "Tous", "Brouillons") sont moins utiles maintenant, vous pouvez également les supprimer:
add_filter( 'views_edit-post', 'wpse14230_views_edit_post' );
function wpse14230_views_edit_post( $views )
{
return array();
}
Je devais faire quelque chose comme ça aujourd'hui et c'est pourquoi j'ai trouvé ce post. Ce que j'ai trouvé qui a fonctionné pour moi est ce post intitulé: " Comment limiter les auteurs à leurs propres publications dans WordPress Admin " par wpbeginner
Voici le code que vous pouvez coller sur votre fichier functions.php:
function posts_for_current_author($query) {
global $pagenow;
if( 'edit.php' != $pagenow || !$query->is_admin )
return $query;
if( !current_user_can( 'edit_others_posts' ) ) {
global $user_ID;
$query->set('author', $user_ID );
}
return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');
C'est exactement ce que fait le rôle "auteur" par défaut. http://codex.wordpress.org/Roles_and_Capabilities
Il suffit de vérifier les fonctionnalités (voir lien sur @Wyck) et l'identifiant de l'auteur dans vos modèles et de placer les éléments que vous ne souhaitez pas que les autres voient dans une vérification if/else:
// Get the author of this post:
$post_author = get_query_var('author_name') ? get_user_by( 'slug', get_query_var('author_name') ) : get_userdata( get_query_var('author') );
// Get data from current user:
global $current_user;
get_currentuserinfo();
// Get the display_name from current user - maybe you have to exchange it with $current_user->user_login
$current_author = $current_user->display_name;
// Check the capability and if the currently logged in user is the the post author
if ( current_user_can('some_capability') && $post_author == $current_author )
{
// Post Meta
$post_meta = get_post_meta( $GLOBALS['post']->ID );
// DO OR DISPLAY STUFF HERE
}
Regardez ici pour une solution plus complète (pour corriger également le nombre de posts sur la barre de filtre): Aide pour condenser/optimiser du code de travail