Après de nombreux jours à tenter de localiser un problème de code, il s’avère que add_cap ne prend que les deux premiers d’un tableau. Le premier (éditeur) ajoutera uniquement delete_others_pages et delete_others_posts à la base de données. Si j'utilise la deuxième méthode de répétition de add_cap, je peux obtenir toutes les fonctionnalités de la base de données.
Quelqu'un peut-il regarder ce code et voir ce qui ne va pas? Pourquoi seuls les deux premiers éléments du tableau vont-ils dans la base de données?
if( $new_roles == 'editor' ) {
$user = new WP_User( $user_id );
$user->add_cap(
'delete_others_pages','delete_others_posts','delete_pages','delete_posts','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_others_pages','edit_others_posts','edit_pages','edit_posts','edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','manage_categories','manage_links','moderate_comments','publish_pages','publish_posts','read','read_private_pages','read_private_posts');
}
elseif( $new_roles == 'author' ) {
$user_id = $XF->visitor->get('user_id');
$user = new WP_User( $user_id );
$user->add_cap(
'delete_posts', 'delete_published_posts'
);
$user->add_cap(
'edit_posts', 'edit_published_posts'
);
$user->add_cap(
'publish_posts', 'read', 'upload_files'
);
$user->add_cap(
'upload_files'
);
}
UPDATE CODE pour placer la fonction complete: Ajoute maintenant des tableaux afin que ma question initiale soit répondue, mais ils sont ajoutés aux mauvais utilisateurs.
public static function set_user_roles( &$classObj, $user_group_id, $secondary_group_ids ) {
/**
* Function set_user_roles(&$classObj, $user_group_id, $secondary_group_ids)
*
* This function sets the current user role based on the secondary group
*/
global $XF, $wp_roles;
$user_groups = explode( ',', $secondary_group_ids );
$user_groups[] = $user_group_id;
/**
* Loop through the user_roles and find the WP role equivalent for each
*/
$user_roles = array();
foreach( $user_groups as $user_group ) {
$user_roles[] = $XF->options['xf_user_role'][$user_group];
/**
* wp_die( 'This is the role:' . var_dump( $XF->options['xf_user_role'] ) );
*
* Returns:
*
* array(7) { [3]=> string(13) "administrator" [4]=> string(6) "author" [2]=> string(10) "subscriber" [1]=> string(10) "subscriber" [5]=> string(6) "author" [7]=> string(11) "contributor" [6]=> string(6) "editor" }
*/
/**
* wp_die( var_dump( $XF->options['xf_user_role'][$user_group] ) );
*
* Returns for user Ellie who has secondary group related to author
* string(6) "author"
*
* Returns Albert who has secondary group set to editor
* string(6) "editor"
*
* Returns Pascal who has secondary group related to contributor
* string(11) "contributor"
*
* Returns Gracie NO secondary group for registered members.
* NULL
*
*/
$new_roles = $XF->options['xf_user_role'][$user_group];
if( $new_roles == '' || $new_roles == null) {
$user_id = $XF->visitor->get('user_id');
$caps = array( 'read' );
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
elseif( $new_roles == 'subscriber' ) {
$user_id = $XF->visitor->get('user_id');
$caps = array( 'read' );
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
elseif( $new_roles == 'contributor' ) {
$user_id = $XF->visitor->get('user_id');
$caps= array( 'delete_posts', 'edit_posts', 'read' );
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
elseif( $new_roles == 'author' ) {
$user_id = $XF->visitor->get('user_id');
$caps = array(
'delete_posts', 'delete_published_posts','edit_posts', 'edit_published_posts','publish_posts', 'read', 'upload_files','upload_files'
);
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
elseif( $new_roles == 'editor' ) {
$user_id = $XF->visitor->get('user_id');
$caps = array (
'delete_others_pages','delete_others_posts','delete_pages','delete_post','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_others_pages','edit_others_posts','edit_pages','edit_posts', 'edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','manage_categories','manage_links','moderate_comments','publish_pages','publish_posts','read','read_private_pages','read_private_posts'
);
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
elseif( $new_roles == 'administrator' ) {
$user_id = $XF->visitor->get('user_id');
$caps = array (
'activate_plugins', 'delete_others_pages','delete_others_posts','delete_pages','delete_plugins','delete_posts','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_dashboard','edit_files','edit_others_pages','edit_others_posts','edit_pages','edit_posts','edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','edit_theme_options','export','import','list_users','manage_categories','manage_links','manage_options','moderate_comments','promote_users','publish_pages','publish_posts','read_private_pages','read_private_posts','read','remove_users','switch_themes','upload_files','create_product'
);
$user = new WP_User( $user_id );
foreach ( $caps as $cap ) {
$user->add_cap( $cap );
}
break;
}
}
}
Mise à jour: des fonctionnalités ont été ajoutées, mais tous les comptes bénéficient désormais de fonctionnalités d'administration. Ceci est maintenant demandé: Les rôles d’éditeur et de contributeur ne sont pas corrects après l’ajout de la fonction
En regardant votre code, je pense que vous essayez de modifier les capacités des rôles existants. Est-ce que j'ai raison?
Pour ce faire, vous devez exécuter add_cap pour un objet de rôle et non pour un objet d'utilisateur. De plus, vous devez savoir que add_cap n'accepte qu'une capacité en tant que chaîne:
$role = get_role( 'editor' );
$role->add_cap( 'the_capability' );
Si vous souhaitez ajouter plusieurs fonctionnalités, vous pouvez effectuer une boucle. Par exemple:
$capabilities = array( 'cap_1', 'cap_2', 'cap_3' );
$role = get_role( 'editor' );
foreach( $capabilities as $cap ) {
$role->add_cap( $cap );
}
La même chose s'applique pour effectuer add_cap pour un objet utilisateur:
//example of user ID
$user_id = 25
$capabilities = array( 'cap_1', 'cap_2', 'cap_3' );
$user = new WP_User( $user_id );
foreach( $capabilities as $cap ) {
$user->add_cap( $cap );
}