web-dev-qa-db-fra.com

Comment limiter les images modales de la v3.5 Media Library à celles d'un identifiant de publication spécifique?

Comment une personne peut-elle limiter les images qui apparaissent dans le modal v3.5 Media Library pour afficher uniquement celles qui sont attachées à un identifiant de publication spécifique?

Je crée un modèle de gestion frontal qui permet à plusieurs auteurs de modifier un message particulier, d'où la nécessité de restreindre ce qui est affiché post-par-post plutôt que ceux téléchargés par un utilisateur particulier.

Le mode de téléchargement est basé sur le didacticiel de téléchargement sur le mode de téléchargement de Mike Jolley . Il a été modifié pour rechercher l'ID de publication dans la classe body et attacher le média téléchargé à ce $ pid.

C'est le modal complet js jusqu'à présent:

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

});

Les deux principaux threads WPSE faisant autorité sur la médiathèque ne traitent que de la restriction par utilisateur.

Une autre référence WPSE est Limiter Médiathèque à Dossier donné .

Toute direction est appréciée.

5
torinagrippa

Je ne sais pas si c'est ce que vous recherchez. Ce code "verrouille" les téléchargements pour afficher uniquement "Téléchargé sur cet article" dans le panneau média.

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 }

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

10
Ünsal Korkmaz

J'ai passé deux jours à chercher une solution, la réponse d'Ünsal Korkmaz n'a pas fonctionné pour moi. Enfin, j'ai trouvé la bonne réponse et je souhaite partager avec tout le monde.

Juste pour clarifier, la réponse de Ünsal Korkmaz présélectionnera l'option "Téléchargé sur ce message" dans la fenêtre du gestionnaire de médias, mais si vous utilisez le gestionnaire de médias dans votre propre plugin, thème, méta-boîte personnalisée, etc., et que vous êtes. construire votre propre cadre de gestionnaire de médias ne fonctionnera pas. Même si cela fonctionne, vous aurez un filtre présélectionné, mais cela ne limite pas efficacement la médiathèque à une pièce jointe définie.

Voici la solution que j'ai trouvée:

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