J'ai inséré un téléchargeur multimédia WP 3.5 dans un widget en exécutant ce JavaScript lorsqu'un bouton est cliqué sur:
var frame = wp.media( {
title : 'Widget Uploader',
multiple : false,
library : { type : 'image' },
button : { text : 'Select Image' }
} );
frame.on( 'close', function() {
var attachments = frame.state().get( 'selection' ).toJSON();
imageWidget.render( widget_id, widget_id_string, attachments[0] );
} );
frame.open();
return false;
Cela me donne un modal qui a les onglets "Upload Files" et "Media Library", mais je veux aussi qu'il ait l'onglet "Insert From URL" que vous obtenez lorsque vous cliquez sur le bouton "Add Media" lors de l'édition d'un article /page.
J'ai passé quelques heures à fouiller sur le Web, à lire le code source et à regarder la présentation de Daryl Koopersmith sur le backend de l'uploader , mais je n'ai pas pu le comprendre.
Quelqu'un peut me diriger dans la bonne direction? Existe-t-il un paramètre que je peux transmettre à wp.media () pour l'inclure, ou dois-je utiliser l'une des vues / modèles intégrés qui l'inclut?
Réponses:
J'ai fouillé le code source pour une raison similaire; Je voudrais ajouter les "Paramètres d'affichage des pièces jointes" au cadre par défaut "sélectionner". Pour autant que je sache, cela ne peut pas être fait en passant des paramètres à wp.media (), comme nous le souhaiterions tous. wp.media a actuellement les deux cadres ("post" et "select"), et les vues qui les accompagnent sont prédéfinies.
L'approche que j'examine maintenant consiste à étendre media.view.mediaFrame pour créer un nouveau cadre (basé sur le cadre "select") qui inclut les parties de la vue dont j'ai besoin. Si je réussis, je posterai le code.
ÉDITER:
Ian, j'ai obtenu la fonctionnalité que je voulais travailler et j'ai mis du temps à comprendre la vôtre. wp.media () n'est pas aussi modulaire qu'il pourrait l'être. Il accepte uniquement les valeurs «sélectionner» et «publier» pour le cadre, «sélectionner» étant la valeur par défaut, vous ne pouvez donc pas créer un nouvel objet cadre. Au lieu de cela, vous devez étendre l'un des deux objets de cadre (tout cela se trouve dans /wp-includes/js/media-views.js), ce qui est également un peu maladroit. L'ajout d'une partie de l'interface utilisateur est un processus en plusieurs étapes. Vous pouvez commencer avec Select et ajouter, mais pour le vôtre, j'ai choisi de commencer avec le code dans le cadre Post et de retirer les trucs de la galerie. Voici mon code, fonctionnant mais pas lourdement testé. Probablement aussi de la place pour la rationalisation.
Cela combine le code de wp.media.view.MediaFrame.Post avec celui de media.view.MediaFrame.Select, en ajustant le fait qu'il est exécuté en dehors de la portée d'origine. Les valeurs du texte sont les différents boutons, et vous pouvez référencer votre propre objet de localisation si vous le souhaitez. La valeur «filtrable» dans le constructeur de la bibliothèque (dans createStates ()) détermine quels types de supports seront pris en charge.
Une fois que vous avez étendu l'objet Select avec cette approche, instanciez-le simplement de la même manière que vous le faites actuellement et ajoutez votre gestionnaire personnalisé lorsqu'une image est sélectionnée. L'insertion à partir de l'URL peut déclencher un événement différent de celui lors de la sélection à partir d'un média téléchargé. Il serait probablement préférable d'instancier votre cadre d'abord, en fait, puis de l'étendre, de sorte que les autres cadres multimédias de la page ne soient pas affectés, mais je n'ai pas essayé cela.
J'espère que cela pourra aider-
la source
D'après l'examen du code source, il semble que le modal média générique ne supporte pas "Insérer depuis URL". La seule façon dont j'ai pu obtenir cet onglet était de spécifier le type de cadre "post":
L'inconvénient est que le titre du modal spécifié est ignoré.
la source
Le fait est que cet onglet renvoie une URL externe à insérer directement dans la publication, tandis que le widget est censé renvoyer un ID de média. Fondamentalement, l'image externe doit être transférée sur le serveur.
Voyez comment / si le plugin Grab & Save fait ce que vous voulez. ( via )
la source