在尝试跟踪代码中的一个问题无数天后,发现add\\u cap只处理数组中的前两个问题。第一个(编辑器)只会将delete\\u others\\u页面和delete\\u others\\u帖子添加到数据库中。如果我使用第二种重复add\\u cap的方法,那么我可以将所有功能都放到数据库中。
有人能看看这段代码,看看出了什么问题吗?为什么只有数组中的前两项进入数据库?
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\'
);
}
更新代码以放置完整的函数:现在添加数组,以便回答我的初始问题,但它们添加到了错误的用户。
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;
}
}
}
更新:正在添加功能,但现在所有帐户都获得了管理功能。现在有人问:
Editor and contributor roles not correct after adding function