Comment permettre à chaque utilisateur de gérer ses propres termes pour une taxonomie personnalisée lorsqu'il est connecté à la page edit-tags? L'utilisateur affichera et gérera uniquement les termes créés par lui-même et non par d'autres pour une taxonomie personnalisée. Mais l'administrateur et l'éditeur peuvent tout gérer. Comment puis je faire ça?
Toute aide serait appréciée. Merci.
Merci pour la solution IMPRESSIONNANTE MikeSchinkel: D
Je viens de faire les mises à jour suivantes dans le code et cela a fonctionné comme un charme:
add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);
function yoursite_list_terms_exclusions( $exclusions ) {
$currentScreen = get_current_screen();
if( current_user_can( 'my_custom_capability_assigned_to_specific_users' )
&& !current_user_can( 'manage_options' ) // Show everything to Admin
&& is_object( $currentScreen )
&& $currentScreen->id == 'edit-<my_taxonomy>'
&& $currentScreen->taxonomy == '<my_taxonomy>' ) {
// Get term_id's array that you want to show as per your requirement
$terms = implode( ',', $term_id );
$exclusions = ( empty( $exclusions ) ? '' : $exclusions ) . ' AND' . ' t.`term_id` IN (' . $terms . ')';
}
return $exclusions;
}
Hmmm. Vous allez devoir savoir qui a ajouté les termes que vous pouvez actuellement utiliser dans un champ usermeta sous forme de liste séparée par des virgules (je suppose que vous ne vous attendez pas à plus de ~ 1000 termes par vous inquiétez pas.)
Vous pouvez stocker les identifiants de terme dans le champ usermeta en utilisant le hook 'edited_terms'
comme vous le voyez ici:
Fondamentalement, votre code pourrait ressembler à ceci "
add_filter('edited_terms', 'yoursite_edited_terms');
function yoursite_edited_terms($term_id) {
if($_POST['taxonomy'] == 'your_taxonomy'): {
$user = wp_get_current_user();
if ($user->ID) {
$terms = get_user_meta($user->ID,'users_terms_for_your_taxonomy');
$terms = (empty($terms) ? $term_id : "{$terms},{$term_id}");
update_user_meta($user->ID,'users_terms_for_your_taxonomy',$terms);
}
}
}
Ensuite, vous devrez utiliser le hook 'list_terms_exclusions'
pour limiter vos termes à ceux nécessaires à l'utilisateur actuel, tout en permettant à l'administrateur un éditeur de les voir tous en ajoutant une fonctionnalité 'can_manage_all_terms'
avec laquelle vous pouvez utiliser le Membres plugin pour créer:
Voici à quoi cela pourrait ressembler:
add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);
function yoursite_list_terms_exclusions( $exclusions, $args ) {
global $pagenow;
if (current_user_can('can_manage_all_terms') &&
$pagenow=='edit-tags.php?taxonomy=your_post_taxonomy') {
$terms = get_user_meta($user->ID,'users_terms_for_your_taxonomy');
$exclusions = " {$exclusions} AND t.ID NOT IN ({$terms})";
}
return $exclusions;
}
Je n'ai pas testé ce code mais il devrait vous mettre sur la bonne voie. Et assurez-vous de remplacer tout élément du code écrit en 'your_taxonomy'
par une référence à votre taxonomie réelle.