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アプリケーション開発”]

この記事が気に入ったら
いいね ! しよう

Twitter で

Written by くっくる

WordPressを使ったウェブサイトの構築・HTMLコーディングの受託案件を中心に埼玉県にて活動中。バイラルメディア風にFacebook pageのいいね!ボタンを設置できるVA Social Buzzをはじめ、複数のWordPressプラグインを公開している。共著書として「エンジニアのためのWordPress開発入門」がある。

View all author posts →

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください