WordPressのメディアライブラリで他のアカウントの画像がでないようにしたい

WordPressのメディアライブラリで他のアカウントの画像がでないようにしたい

Kazuya Takato

Kazuya Takato

こんにちは。づやです。

WordPressのメディアライブラリって便利ですよね。

デフォルトだと投稿者以上の権限の人が使える画像をアップしたりできるあの機能です。

メディアライブラリ

ただこの機能、他のアカウントがアップした画像とかも一覧にでてきちゃうんですよね。さすがに他人がアップした物は削除はできないのですが、一覧に出したり使用したりは可能です。

 

場合にもよるんですが、管理者(編集者もかな?)以外は自分のアップしたファイルだけ見れれば十分な気がします。自分がアップした画像を他の人に見られたくないことも。
それで、なんとかしようと思ってコードを追ってみたんですが、いまいちGoodなフックがありません。

 

絶対あると思うんですが。(´・ω・`)
とりあえず、query_stringで力技でなんとかしてみました。

//functions.phpにでも書いておく
add_filter('query_string', "set_media_query");

function set_media_query($query_string){
	global $pagenow,$current_user; // media-upload.php 、upload.php

	// メディアライブラリ系の処理以外は何もしない
	if($pagenow != 'media-upload.php' && $pagenow != 'upload.php') {
		return $query_string;
	}

	get_currentuserinfo();

	// 編集者以上だったら何もしない
	if($current_user->user_level >= 5) {
		return $query_string;
	}

	wp_parse_str($query_string, $qv);

	// メディア以外のqueryの場合も何もしない
	if($qv['post_type'] != 'attachment') {
		return $query_string;
	}

	// 条件に自分の画像を追加
	$add_query_string = array(
		'author' => $current_user->ID
	);

	$new_query_vars = array_merge($add_query_string,$qv);

	$query_var = array();
	foreach ($new_query_vars as $key => $value) {
		$query_var[] = $key.'='.$value;
	}

	return join('&', $query_var);

}

 

 

こうすると

 

 

無事自分の画像しかでなくなったよ
こんな感じになりました。

 

 

 

管理者の場合
ちなみに管理者はちゃんと全部見れます。実はどこかの設定で出来る気もするので、調べておきますね。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

1983年生まれ。SIerとしてのキャリアをスタートし、JavaやC#を中心に多岐にわたる開発プロジェクトにエンジニアとして参加。その経験を活かし、LIGを創業。バックエンドおよびフロントエンドエンジニアとしての深い知識と経験をもとに、多様なプロジェクトに従事。2023年7月には社長室室長に就任にし、社内の体制やルールの最適化、AI技術の推進など、経営戦略の一翼を担っています。

このメンバーの記事をもっと読む