ワードプレスで複数人ユーザーでサイトを運用している際、標準の仕様ではメディアライブラリ画像で他のユーザーがアップロードした画像が表示されてしまいます。
権限が無いと編集や削除は出来ませんが表示されていることが好ましくない場合もありますので非表示にしてみます。
自分のアップロード画像のみが表示されるようにする
フィルターフックで追記します。管理者は全部表示されていた方が良いかと思いますので管理者は除外されています。
[rml_read_more]
add_filter('posts_where', 'show_onlymyimage');
function show_onlymyimage($where)
{
global $current_user;
if (is_admin()) {
if (current_user_can('subscriber')) {
if (isset($_POST['action']) && ($_POST['action'] == 'query-attachments')) {
$where .= ' AND post_author=' . $current_user->data->ID;
}
}
}
return $where;
}
非表示になりました!
コードについて
このコードは、WordPressの管理画面でメディアライブラリ(メディア添付ファイル)を表示する際に、購読者(Subscriber)権限を持つユーザーが自分のアップロードしたメディアのみを表示するためのフィルターを追加するものです。
add_filter('posts_where', 'show_onlymyimage');
: この行は、posts_where
フィルターフックにshow_onlymyimage
関数を追加しています。このフィルターは、WordPressのメディアライブラリで使用されるSQLクエリのWHERE
句を変更するために使われます。function show_onlymyimage($where) {
: ここでは、show_onlymyimage
関数が定義されています。この関数は、$where
と呼ばれる元々のWHERE
句を引数として受け取ります。global $current_user;
:$current_user
グローバル変数は、現在のユーザーの情報を含んでいます。if (is_admin()) {
: この条件は、現在が管理画面であるかどうかを確認しています。管理画面でのみこの機能を有効にしたいためです。if (current_user_can('subscriber')) {
: 現在のユーザーが ‘subscriber’ 権限を持っているかどうかを確認しています。if (isset($_POST['action']) && ($_POST['action'] == 'query-attachments')) {
: この条件は、リクエストがメディアライブラリの検索であることを確認しています。これは、メディアライブラリの検索が行われたときにこのフィルターが実行されるようにするためです。$where .= ' AND post_author=' . $current_user->data->ID;
: もし条件がすべて満たされた場合、元々の$where
に追加の条件を結合しています。この条件は、メディアの投稿者が現在のユーザーのIDと一致する場合に限定されます。return $where;
: 最後に、変更された$where
を返しています。これにより、元のSQLクエリが変更され、購読者権限を持つユーザーがアップロードしたメディアのみが表示されるようになります。
まとめ
他のユーザーさんのメディアが表示されない方が良い場合もあるかと思いますので、もしメディア画像を非表示にしたいときは…お試しください。