こんにちは、natsu85さん。
ちょうど今日、ユーザーではないですが、特定のポストタイプに紐づくアタッチメントを非表示にするというのをやったので、それを少し変えてみました。
function _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', '_users_own_attachments' );
他のプラグインで ajax を使った時に影響がでる可能性を否定できないので、その辺り念入りにチェックしてください。
※ 関数名が変なのは適当に変えてくださいw
KUCKLU様
遅くにありがとうございました!!
非表示になりました!!
他のプラグインに影響があるとしてもattachmentがインしている時だけ影響する可能性があるということであっていますでしょうか??
はい、post_type => attachment として、get_posts などで投稿データを取得している場合に影響ができる可能性があります。特に、最近流行りの REST API を使用して Ajax でかっこいいサイトを作成している場合は、動作確認を念入りにお願いします。
ちゃんと検証していないので、大丈夫!といないくてすみません。
jim912 さん、いつもお世話になってます!
過去記事はヒントの山です。ありがとうございます。
僕も最初、ajax_query_attachments_args を使ったやり方で「できたー!」てなったんですけれど、メディアライブラリの表示を、グリッドからリストに変えると、非表示にしたはずの全てのアタッチメントが表示されます。
僕は、ここで悩んで、pre_get_posts にたどり着きました。
そうですね。ajax_query_attachments_argsは、ajaxの時しか動作しませんから。
ただし、より限定的にするという意味では、グリッド表示の時には ajax_query_attachments_args を利用し、リスト表示の際には pre_get_posts を利用するのが一番影響範囲が少なくなるように思います。
KUCKLU様、jim912様
お返事遅くなってしまい申し訳ありません。
お2人共本当にありがとうございます。
今回は投稿者が管理画面にログインした場合、メディアは非表示にしました。ブログの投稿から写真を投稿する場合がリスト表示ではなくグリッド表示のみになるので、ここをほかの人がUPした写真を非表示になればと思っているので、ajax_query_attachments_argsを使用してみたのですが、投稿からUPする際に「フォルダを選択」等が表示されなくなってしまいました。私のやり方がちがったのかもしれませんが…
メニューからメディアを非表示にしただけで、使えなくなってるわけではないの今回はpre_get_postsを使用することに致しました。
REST APIも使用していませんし、post_type => attachmentでは指定せずに共通の親カテゴリ名で取得する予定です。
もう少し検証してみないと分からない部分もあるかと思いますが、問題なければこれで進めていきたいと思います。
お2人共本当にありがとうございましたm(_ _)m
解決済みにしていませんでした。
申し訳ありません。