特定の投稿IDに添付されている画像のみを表示するように、v3.5 Media Libraryモーダルに表示される画像を制限する方法を教えてください。
私は、複数の作者が特定の投稿を編集できるようにするフロントエンド管理テンプレートを作成しています。そのため、特定のユーザーがアップロードした投稿ではなく投稿ごとに表示内容を制限する必要があります。
アップロードモーダルは Mike Jolleyのアップロードモーダルチュートリアル に基づいています。ボディクラスで投稿IDを探し、アップロードしたメディアをその$ pidに添付するように変更されました。
これはこれまでのところ完全なモーダルjsです。
// Uploading files
jQuery(document).ready(function($) {
var file_frame;
var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
var classes = $('body').attr('class'); // get all classes from <body> element
var set_to_post_id = classes.match(/postid-(\d+)/)[1]; // pid to attach media to
jQuery(document).on('click', '.upload_image_button', function(){
event.preventDefault();
// If the media frame already exists, reopen it.
if ( file_frame ) {
// Set the post ID to what we want
file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
// Open frame
file_frame.open();
return;
} else {
// Set the wp.media post id so the uploader grabs the ID we want when initialised
wp.media.model.settings.post.id = set_to_post_id;
}
// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery( this ).data( 'uploader_title' ),
button: {
text: jQuery( this ).data( 'uploader_button_text' ),
},
multiple: false // Set to true to allow multiple files to be selected
});
// When an image is selected, run a callback.
file_frame.on( 'select', function() {
// We set multiple to false so only get one image from the uploader
attachment = file_frame.state().get('selection').first().toJSON();
// Do something with attachment.id and/or attachment.url here
// Restore the main post ID
wp.media.model.settings.post.id = wp_media_post_id;
});
// Finally, open the modal
file_frame.open();
});
// Restore the main ID when the add media button is pressed
jQuery('a.add_media').on('click', function() {
wp.media.model.settings.post.id = wp_media_post_id;
});
});
メディアライブラリの2つの主要な権限のあるWPSEスレッドは、ユーザーによる制限のみを扱います。
もう一つのWPSE参照は メディアライブラリを与えられたフォルダーに制限する です。
どんな方向でも大歓迎です。
私はこれがあなたが探しているものであるかどうかわからない。このコードは、メディアパネルに「この投稿にアップロードされた」だけを表示するようにアップロードを「ロック」します
add_action( 'admin_footer-post-new.php', 'firmasite_mediapanel_lock_uploaded' );
add_action( 'admin_footer-post.php', 'firmasite_mediapanel_lock_uploaded' );
function firmasite_mediapanel_lock_uploaded() { ?>
<script type="text/javascript">
jQuery(document).on("DOMNodeInserted", function(){
// Lock uploads to "Uploaded to this post"
jQuery('select.attachment-filters [value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
});
</script>
<?php }
http://unsalkorkmaz.com/how-to-lock-uploads-to-show-only-uploaded-to-this-post-in-media-panel/ から
私は2日間解決策を探すのに費やしました、ÜnsalKorkmazからの答えは私のために働きませんでした。最後に私は正しい答えを見つけました、そして私は一人一人と共有したいと思います。
わかりやすくするために、ÜnsalKorkmazからの回答では、メディアマネージャウィンドウで[この投稿にアップロード]のオプションが選択されていますが、自分のプラグイン、テーマ、カスタムメタボックスなどでメディアマネージャを使用しているあなた自身のメディアマネージャフレームを構築してもうまくいきません。それがうまくいっても、あなたは事前に選択されたフィルタを持つでしょうが、これはメディアライブラリを定義されたポスト添付ファイルに効果的に制限しません。
これが私が見つけた解決策です:
//Chame the selector to fit your code
jQuery('#manage-gallery-button').click(function(e) {
e.preventDefault();
var frame = wp.media({
title : 'Pick the images for the gallery of this entry',
frame: 'select',
multiple : true,
library : {
type : 'image',
//HERE IS THE MAGIC. Set your own post ID var
uploadedTo : wp.media.view.settings.post.id
},
button : { text : 'Insert' }
});
frame.on('close',function() {
// get selections and save to hidden input plus other AJAX stuff etc.
var selection = frame.state().get('selection');
var gallery_ids = new Array();
var my_index = 0;
selection.each(function(attachment) {
gallery_ids[my_index] = attachment['id'];
my_index++;
});
var ids = gallery_ids.join(",");
//Store ids in my hidden input
jQuery('#gallery-ids').val(ids);
Refresh_Gallery(ids);
});
frame.on('open',function() {
//Preselect attachements from my hidden input
var selection = frame.state().get('selection');
ids = jQuery('#gallery-ids').val().split(',');
ids.forEach(function(id) {
attachment = wp.media.attachment(id);
attachment.fetch();
selection.add( attachment ? [ attachment ] : [] );
});
});
frame.open();
});