Help us understand the problem. What is going on with this article?

WordPressでアップロードしたメディアを投稿者自身にしか表示させたくない。

More than 1 year has passed since last update.

2017-08-09 18:13:43

投稿者が不特定多数いる場合、アップロードした画像を投稿者自身にしか表示させたくないことがあるかと思います。

今回それを行いたいのは

contributor(寄稿者)とauthor(投稿者)だったので

functions.php
function my_media_author_query( $wp_query ) {
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==='contributor'||$user_role==='author'){
      $wp_query->set( 'author', $current_user->id );
  }
}
add_filter('pre_get_posts', 'my_media_author_query' );

当初海外のQ&Aサイトに投稿されていたのは上記のようなコードでした。
とりあえずうまく行ったように見えるのは落とし穴。

その後クライアントからAdvancedCustomField(ACF)で作ったハズのユーザープロフィールが変更されない、とのご指摘をうけました。

色々問題を切り分けていくと、どうもこのコードが原因のよう。
そもそもadmin-ajax.phpをACFはつかっているようで、そのフィールドの抽出作業の過程で上記のコードでは作成者でフィルタリングされてしまう為に表示されなくなる模様。

結果色々工夫した挙句、

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

functions.php
function my_media_author_query( $wp_query ) {

//追加! post_typeがattachment以外はreturn 
if($wp_query->query_vars['post_type']!=='attachment'){
  return;
}

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==='contributor'||$user_role==='author'){
      $wp_query->set( 'author', $current_user->id );
  }
}
add_filter('pre_get_posts', 'my_media_author_query' );

でメディア画像の抽出時の動作の時のみフィルタリングさせる事に成功しました。

そもそもコードが不完全だったようです。。
あまり鵜呑みにしたらダメですね。

sutefu23
福岡で働くフリーエンジニアです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした