Do widżetu wstawiłem program do przesyłania multimediów WP 3.5, uruchamiając ten JavaScript po kliknięciu przycisku:
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;
To daje mi modal, który ma zakładki „Prześlij pliki” i „Biblioteka multimediów”, ale chcę również, aby zawierał zakładkę „Wstaw z adresu URL”, którą otrzymujesz po kliknięciu przycisku „Dodaj multimedia” podczas edytowania postu /strona.
Spędziłem kilka godzin, grzebiąc w Internecie, czytając kod źródłowy i oglądając prezentację Daryla Koopersmitha na zapleczu programu przesyłającego , ale nie byłem w stanie tego rozgryźć .
Czy ktoś może skierować mnie we właściwym kierunku? Czy istnieje parametr, który mogę przekazać do wp.media (), aby go uwzględnić, czy powinienem użyć jednego z wbudowanych widoków / modeli, które go obejmują?
Odpowiedzi:
Kopie kod źródłowy z podobnego powodu; Chciałbym dodać „Ustawienia wyświetlania załączników” do domyślnej ramki „wybierz”. O ile wiem, nie można tego zrobić, przekazując parametry do wp.media (), jak wszyscy chcielibyśmy. wp.media ma obecnie dwie ramki („post” i „select”), a towarzyszące im widoki są wstępnie ustawione.
Podejście, na które teraz patrzę, polega na rozszerzeniu media.view.mediaFrame, aby utworzyć nową ramkę (na podstawie ramki „wybierz”), która zawiera części widoku, których potrzebuję. Jeśli to zadziała, opublikuję kod.
EDYTOWAĆ:
Ian, dostałem funkcję, którą chciałem pracować, i poświęciłem trochę czasu na jej zrozumienie. wp.media () nie jest tak modułowy, jak mógłby być. Akceptuje tylko wartości „select” i „post” dla ramki, przy czym „select” jest wartością domyślną, więc nie można utworzyć nowego obiektu ramki. Zamiast tego musisz rozszerzyć jeden z dwóch obiektów ramki (wszystko to znajduje się w /wp-include/js/media-views.js), co również jest trochę niezgrabne. Dodanie części interfejsu użytkownika jest procesem kilkuetapowym. Możesz zacząć od Wybierz i dodać, ale dla ciebie postanowiłem zacząć od kodu w ramce Post i zabrać rzeczy z galerii. Oto mój kod, działający, ale niezbyt przetestowany. Prawdopodobnie też trochę miejsca na usprawnienia.
Łączy to kod z wp.media.view.MediaFrame.Post z kodem z media.view.MediaFrame.Select, dostosowując się do faktu, że jest on wykonywany poza pierwotnym zakresem. Wartościami tekstu są różne przyciski, a jeśli chcesz, możesz odwoływać się do własnego obiektu lokalizacji. Wartość „filtrowalna” w konstruktorze biblioteki (w createStates ()) określa, które typy nośników będą obsługiwane.
Po rozszerzeniu obiektu Select za pomocą tego podejścia, po prostu ułóż go w taki sam sposób, jak obecnie i dodaj niestandardowy moduł obsługi dla wybranego obrazu. Wstaw z adresu URL może wywołać inne zdarzenie niż podczas pobierania z przesłanych mediów. Prawdopodobnie lepiej byłoby najpierw utworzyć instancję ramki, a następnie ją rozszerzyć, aby nie wpłynęło to na inne ramki multimedialne na stronie, ale nie próbowałem tego.
Mam nadzieję, że pomaga-
źródło
Po zbadaniu kodu źródłowego wydaje się, że ogólny modalny nośnik nie obsługuje opcji „Wstaw z adresu URL”. Jednym ze sposobów, w jaki udało mi się uzyskać tę kartę, było określenie typu ramki „post”:
Minusem jest to, że tytuł określonego modalu jest ignorowany.
źródło
Chodzi o to, że ta karta zwraca zewnętrzny adres URL do bezpośredniego wstawienia do postu, podczas gdy widżet ma zwrócić identyfikator nośnika. Zasadniczo obraz zewnętrzny musi zostać przesłany na serwer.
Zobacz, jak / czy wtyczka Grab & Save robi to, co chcesz. ( przez )
źródło