寄稿者にメディアアップロード権限を付与し、自分のアップロード画像だけを表示する方法

Cocoonカスタマイズ集
この記事は約3分で読めます。
記事内に広告が含まれています。

はじめに

権限レベル投稿メディア公開他人の投稿編集
管理者 (Administrator)●●●●
編集者 (Editor)●●●●
投稿者 (Author)●●●×
寄稿者 (Contributor)●×××
購読者 (Subscriber)××××

ユーザー権限によって投稿やメディアの操作範囲が異なります。
表1に主要なユーザー権限と、それぞれの操作可能範囲を示します。

寄稿者(Contributor)は、既存のメディアを使用した記事の作成は可能ですが、新しい画像のアップロードはできません。

そこで、寄稿者にもメディアへの画像追加権限を付与します。
また、メディアライブラリでは自分がアップロードしたメディアのみを表示するように制御します。

この記事では、この方法について説明します。

実装手順

以下のコードをfunctions.phpに追加します。

// 寄稿者にも「ファイルのアップロード権限」を付与
add_action('admin_init', function () {
  $role = get_role('contributor');

  if ($role && !$role->has_cap('upload_files')) {
    $role->add_cap('upload_files');
  }
});


/**
 * 現在ログイン中のユーザーが寄稿者かを判定
 *
 * 管理者・編集者ではなく寄稿者ロールを持つ場合にtrueを返却
 *
 * @return bool 寄稿者であれば true、そうでなければ false
 */
if (!function_exists('is_current_user_contributor')):
function is_current_user_contributor() {
  $current_user = wp_get_current_user();

  // ユーザーなしは処理対象外
  if (!$current_user->exists()) {
    return false;
  }

  return !current_user_can('administrator') &&
         !current_user_can('editor') &&
         in_array('contributor', (array) $current_user->roles, true);
}
endif;


// メディアグリッドに表示する条件を変更
add_filter('ajax_query_attachments_args', function ($query) {
  // 寄稿者は自身がアップロードしたファイルに限定
  if (is_current_user_contributor()) {
    $query['author'] = get_current_user_id();
  }

  return $query;
});


// 投稿クエリの取得条件を変更
add_action('pre_get_posts', function ($query) {
  if (!is_admin() || !$query->is_main_query()) {
    return;
  }

  global $pagenow;

  // 寄稿者は自身がアップロードしたファイルに限定
  if ($pagenow === 'upload.php' && is_current_user_contributor()) {
    $query->set('author', get_current_user_id());
  }
});

さいごに

今回紹介した方法を使えば、寄稿者にもメディアアップロードの権限を付与し、さらに自分のアップロードした画像だけを表示する制御が可能になります。
これにより、サイト全体のメディア管理が整理され、不要なファイルの混在を防ぐことができます。
特に複数人で運営しているサイトでは、ユーザーごとに管理範囲を限定することで、管理者や編集者の負担を軽減し、セキュリティや運営効率の向上にもつながります。

タイトルとURLをコピーしました