在开发WordPress前端用户中心的过程中,会遇到投稿者和订阅者角色的用户不能上传附件的问题。有些用户可能会认为这是WordPress的bug,其实不然,这是WordPress在安全性方面的一个设计。在任何Web开发的过程中,用户上传文件的动作都是比较危险的,我们不知道别有用心的用户会上传一些什么样的文件。所以为了尽可能的提高安全性,WordPress索性不给投稿者和订阅者用户在前端上传文件的权限。

通过角色和权限API为投稿者和订阅者用户添加上传文件的权限

在WordPress的角色和用户系统中,上传文件的权限是“upload_files”,为了让投稿者和订阅者用户也可以上传文件,我们通过WordPress的角色和权限API为这两个角色增加上传文件的权限就可以了。
下面的代码是为投稿者用户添加上传文件权限的示例代码,把下面的代码复制到主题的functions.php中即可。


if ( current_user_can('contributor') && !current_user_can('upload_files') )
	add_action('admin_init', 'allow_contributor_uploads');

function allow_contributor_uploads() {
	$contributor = get_role('contributor');
	$contributor->add_cap('upload_files');
}

通过媒体处理函数烧过角色和权限的限制
除此之外,我们还可以通过WordPress的媒体上传函数来实现前端用户上传文件的功能。通过这些函数实现的文件上传功能是不受WordPress角色和权限系统限制的。