web-dev-qa-db-ja.com

V3.5 Media Libraryモーダルの画像を特定の投稿IDの画像のみに制限する方法

特定の投稿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参照は メディアライブラリを与えられたフォルダーに制限する です。

どんな方向でも大歓迎です。

5
torinagrippa

私はこれがあなたが探しているものであるかどうかわからない。このコードは、メディアパネルに「この投稿にアップロードされた」だけを表示するようにアップロードを「ロック」します

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/ から

10
Ünsal Korkmaz

私は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();
 });
5
cybmeta