防止作者在Wordpress 3.5和ACF中的媒体上传对话框中看到其他作者媒体文件

时间:2013-02-28 11:44:34

标签: php plugins custom-fields media-library wordpress-3.5

我现在一直在努力解决这个问题,而且似乎无法让它发挥作用。

我有

  • 使用Advanced Custom Fields plugin的多用户wordpress 3.5网站。
  • 自定义帖子类型,图库,作者可以通过自定义字段发布照片
  • 用户个人资料中的自定义字段。

当作者将照片上传到帖子中时,作者可以在媒体上传对话框中看到其他作者的上传内容。我不希望这种情况发生。我希望作者只能在媒体上传对话框中看到他们自己的上传内容。

我可以通过以下方式实现这一目标:

// Prevent Authors from seeing other authors media files 
add_filter('parse_query', 'my_parse_query' );
function my_parse_query( $wp_query ) {
// Only applicable for Media Library && Media Upload Dialog
if (! preg_match('/wp-admin\/(?:upload|media-upload|admin-ajax).php/', $_SERVER['REQUEST_URI']) ) {
   return;
}
global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
if ($user_role && is_string($user_role) && strtolower($user_role)==='author') {
  $wp_query->set( 'author', $current_user->id );
}
}

但反过来,这会阻止自定义字段在用户配置文件中工作。这是因为ACF使用admin-ajax将字段添加到编辑屏幕,但是如果我从上面的函数中删除admin-ajax部分,它会再次开始显示其他作者媒体,所以它又回到原点。

我尝试使用我在互联网上发现的许多不同方法(1) (2) (3),但由于新的wordpress 3.5媒体上传,这些方法都无法运行对话框和/或ACF。

在使用ACF时,知道如何防止作者看到其他作者媒体吗?

1 个答案:

答案 0 :(得分:1)

添加

if($wp_query->query_vars['post_type']!=='attachment'){return;}

它会起作用。 问候。