wake-up-neo.com

Wie beschränke ich Bilder in v3.5 Media Library modal nur auf diejenigen aus einer bestimmten Beitrags-ID?

Wie kann jemand die Bilder, die im Modal v3.5 Media Library angezeigt werden, so einschränken, dass nur diejenigen angezeigt werden, die an eine bestimmte Beitrags-ID angehängt sind?

Ich erstelle eine Front-End-Verwaltungsvorlage, mit der mehrere Autoren einen bestimmten Beitrag bearbeiten können. Daher muss eingeschränkt werden, was post-by-post angezeigt wird, anstatt dass es von einem bestimmten Benutzer hochgeladen wird.

Das Upload-Modal basiert auf Mike Jolleys Tutorial zum Upload-Modal . Es wurde geändert, um nach der Post-ID in der Body-Klasse zu suchen und hochgeladene Medien an diese $ pid anzuhängen.

Dies ist das komplette Modal js bis jetzt:

// 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;
  });

});

Die beiden primären autorisierenden WPSE-Threads in der Medienbibliothek befassen sich nur mit der Einschränkung durch den Benutzer.

Eine weitere WPSE-Referenz ist Medienbibliothek auf bestimmten Ordner beschränken .

Jede Richtung wird geschätzt.

5
torinagrippa

Ich bin mir nicht sicher, wonach Sie suchen. Mit diesem Code werden Uploads "gesperrt", sodass im Medienbedienfeld nur "Auf diesen Beitrag hochgeladen" angezeigt wird

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 }

von http://unsalkorkmaz.com/how-to-lock-uploads-to-show-only-uploaded-to-this-post-in-media-panel/

10
Ünsal Korkmaz

Ich habe zwei Tage nach einer Lösung gesucht, die Antwort von Ünsal Korkmaz hat bei mir nicht funktioniert. Endlich habe ich die richtige Antwort gefunden und möchte sie mit jedem teilen.

Zur Verdeutlichung wird in der Antwort von Ünsal Korkmaz die Option "In diesen Beitrag hochgeladen" im Medienmanager-Fenster vorausgewählt. Wenn Sie den Medienmanager jedoch in Ihrem eigenen Plugin, Thema, benutzerdefinierten Meta-Feld usw. verwenden, ist dies der Fall Das Erstellen eines eigenen Media Manager-Frames funktioniert nicht. Selbst wenn es funktioniert, haben Sie einen vorgewählten Filter, der die Medienbibliothek jedoch nicht effektiv auf definierte Post-Anhänge beschränkt.

Hier ist die Lösung, die ich gefunden habe:

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