我有一个带有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 );
这是可行的,但看起来非常不安全。一定有更好的方法可以做到这一点,请帮助!!!
最合适的回答,由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();