最近,我不得不编写脚本,将一些角色添加到数据库中的一组用户中。为此,我编写了如下脚本:
error_reporting(E_ALL);
require("../../wp-load.php");
$source_file = \'role_source\';
if(($source_handle = fopen($source_file, "r")) !== false) {
while(($row = fgetcsv($source_handle)) !== false) {
if(count($row) > 2) {
if(($user = get_user_by(\'id\', $row[1])) !== false) {
for($i = 2; $i < count($row); $i++) {
if(!$user->has_cap($row[$i])) {
$user->add_role($row[$i]);
}
}
}
}
}
fclose($source_handle);
}
此操作针对的源数据如下所示:
[email protected],2,role-slug-1,role-slug-2
并用于将用户尚未拥有的每个列出的角色添加到其集合中。问题是,这不太管用。如果我看看
wp_usermeta
表,位于
wp_capabilities
行I可以看到正确列出的角色,以及所有后续调用
WP_User->has_cap(<role name>)
返回true,但它们是唯一可以充当该用户角色的东西。使命感
current_user_can()
返回false,任何允许您管理用户并授予其多个角色的插件都会拒绝该用户具有这些功能。我错过什么了吗?从文档中可以看出
WP_User->add_role()
应该是我需要做的全部。