スキルアップを始める!

【WordPress】他のユーザーがアップロードしたメディア画像を非表示にする方法

WordPress(ワードプレス)
WordPress(ワードプレス)
この記事は約4分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

ワードプレスで複数人ユーザーでサイトを運用している際、標準の仕様ではメディアライブラリ画像で他のユーザーがアップロードした画像が表示されてしまいます。

権限が無いと編集や削除は出来ませんが表示されていることが好ましくない場合もありますので非表示にしてみます。

自分のアップロード画像のみが表示されるようにする

フィルターフックで追記します。管理者は全部表示されていた方が良いかと思いますので管理者は除外されています。

[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)権限を持つユーザーが自分のアップロードしたメディアのみを表示するためのフィルターを追加するものです。

  1. add_filter('posts_where', 'show_onlymyimage');: この行は、posts_where フィルターフックに show_onlymyimage 関数を追加しています。このフィルターは、WordPressのメディアライブラリで使用されるSQLクエリのWHERE句を変更するために使われます。
  2. function show_onlymyimage($where) {: ここでは、show_onlymyimage 関数が定義されています。この関数は、$where と呼ばれる元々のWHERE句を引数として受け取ります。
  3. global $current_user;: $current_user グローバル変数は、現在のユーザーの情報を含んでいます。
  4. if (is_admin()) {: この条件は、現在が管理画面であるかどうかを確認しています。管理画面でのみこの機能を有効にしたいためです。
  5. if (current_user_can('subscriber')) {: 現在のユーザーが ‘subscriber’ 権限を持っているかどうかを確認しています。
  6. if (isset($_POST['action']) && ($_POST['action'] == 'query-attachments')) {: この条件は、リクエストがメディアライブラリの検索であることを確認しています。これは、メディアライブラリの検索が行われたときにこのフィルターが実行されるようにするためです。
  7. $where .= ' AND post_author=' . $current_user->data->ID;: もし条件がすべて満たされた場合、元々の$whereに追加の条件を結合しています。この条件は、メディアの投稿者が現在のユーザーのIDと一致する場合に限定されます。
  8. return $where;: 最後に、変更された$whereを返しています。これにより、元のSQLクエリが変更され、購読者権限を持つユーザーがアップロードしたメディアのみが表示されるようになります。

まとめ

他のユーザーさんのメディアが表示されない方が良い場合もあるかと思いますので、もしメディア画像を非表示にしたいときは…お試しください。

URLをコピーしました!