Web制作無料相談会(純喫茶LIG)
Web制作無料相談会(純喫茶LIG)
2012.11.15

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

づや

こんにちは。づやです。

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);

}

 

 

こうすると

 

 

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

 

 

 

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