
WordPress のメディアライブラリで他人がアップロードした画像を非表示にする
こんにちは、KUCKLU(くっくる)です。
今日は、朝から晩までずっと WordPress 三昧でした。案件ではなく、プライベートのタスクの消化です。いま力を入れて開発/メンテナンス中の WordPress プラグインがあって、それの機能強化をしていたのですが、ちょうど自分がやったのと同じような処理を行いたいという質問を、WordPress.org のフォーラムで発見しました。
https://ja.forums.wordpress.org/topic/157980
メディアライブラリで他人の画像を非表示にしたい!というのは、管理画面のカスタマイズ案件でよくあるカスタマイズですね。筆者が複数人いるようなサイトだとよくあります。ただ、いざカスタマイズしてみようと、メディアライブラリ周りのフィルター/アクションフックを探してみるが、どれもなんだかイマイチです。でも、ゆっくり冷静に考えると、凄く有名で過去に話題になったアクションフックを使用すれば実装できることに気づきます。
それは、pre_get_posts アクションです。考えてみれば当たり前ですよね。WordPress は、投稿でデータを管理しているわけですからね。というわけで、以下にサンプルを示します。
<?php /** * Users own attachments. * * @param object $wp_query */ function va_1378_users_own_attachments( $wp_query ) { global $current_user, $pagenow; if ( ! is_a( $current_user, 'WP_User' ) || ! in_array( $pagenow, array( 'upload.php', 'media-upload.php', 'admin-ajax.php' ) ) ) { return; } if ( ! isset( $wp_query->query_vars['post_type'] ) || 'attachment' !== $wp_query->query_vars['post_type'] ) { return; } if( ! current_user_can( 'edit_others_posts' ) ) { $wp_query->set( 'author', $current_user->ID ); } return; } add_action( 'pre_get_posts', '1378_users_own_attachments' );
しっかりと動作テストを行っているわけではないので、ご自身の責任のもとコピペください。
使い方は、テーマの functions.php に記述、またはプラグインを作成してプラグイン内に記述してください。テーマ特有のカスタマイズではないと思うので、プラグインを作成する方がいいかなと思います。使いまわせますしね。
最後に
最近、これ系の記事は Qiita というノウハウ共有サイトに投稿してしまっています。マークダウンで書けるし、投稿が手軽なので、つい Qiita にメモがてら投稿してしまっています。
KUCKLU の Qiita はこちらです。
http://qiita.com/kuck1u
それでは本日はここまで。
KUCKLU でした。
[amazonjs asin=”4798130931″ locale=”JP” title=”一歩先にいくWordPressのカスタマイズがわかる本”]
[amazonjs asin=”4873116783″ locale=”JP” title=”詳解 WordPress”]
[amazonjs asin=”4873117062″ locale=”JP” title=”WordPressによるWebアプリケーション開発”]