如何安全地允许用户在CPT上上传?

时间:2016-05-13 作者:Caio Mars

我有一个带有WP媒体的表单,允许用户在前端上传自定义帖子类型。每次我尝试以用户身份上传时,我都可以You don\'t have permission to attach files to this post.

进一步调查后,我在文件中被拒绝了行动ajax-actions.php 它检查的地方current_user_can( \'edit_post\', $post_id ) 在上载文件之前。我一直在努力使用user_has_cap 筛选以允许用户执行此操作,但它看起来非常不安全:

public function allow_user_to_upload( $allcaps, $caps, $args ) {

    if ( $args[2] != 9 ) // 9 is the post_id where the form is
        return $allcaps;

    foreach ($caps as $cap ) {
        $allcaps[$cap] = true;
    }

    return $allcaps;

} add_filter( \'user_has_cap\', array( $this, \'allow_user_to_upload\'), 100, 3 );
这是可行的,但看起来非常不安全。一定有更好的方法可以做到这一点,请帮助!!!

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

如果我正确理解了问题及其评论中描述的情况,那么用户有能力上载文件和编辑您的帖子类型,因此您不应该对功能进行筛选,用户已经具备了正确的功能。

问题是wp_editor() 使用全局$post 默认情况下,在您的上下文中$post 用于嵌入编辑器的页面。

解决方案:设置全局$post 执行前要编辑的帖子wp_editor():

global $post;
// Set the global post to your post object
// Exmple if the ID of your post is 2
$post = get_post( 2 );
wp_editor();
如果您使用的是新的post表单:

global $post;
// Get default post object of my_post_type
$post = get_default_post_to_edit( \'my_post_type\', true );
wp_editor();

SO网友:Sisir

如果要允许用户上载文件。edit_post 要检查的盖子错误。相反,您需要添加capupload_files 并对照它进行检查。如果只允许图像,可以自定义允许的MIME类型的文件管理器。

更多信息,请访问https://codex.wordpress.org/Roles_and_Capabilities#upload_files

相关推荐

Wp-Content/Uploads/中的图片不会显示在我的媒体库中,也不会使用FTP协议上传

你好,有人能帮我吗?此时,我想知道这是否是一个数据库问题,因为当我尝试将图像拖放到媒体库中时,会出现以下错误-“无法将帖子插入数据库”。喂?我有权限将正确的上载文件夹设置为744,内部文件夹设置为644。还设置了我的wp配置。php文件直接指向my的正确表。sql数据库所以我被难住了谢谢你的帮助