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

