Natknąłem się na to, próbując zintegrować upuszczenie Dropbox w API selektora z wtyczką, którą piszę.
Dokumentacja interfejsu API nakazuje umieszczenie następującego script
znacznika u góry pliku:
<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>
Wszystko dobrze i dobrze, i faktycznie działa, gdy wklejam go bezpośrednio na stronę wywoływaną w sekcji admin. Ale chciałbym użyć pewnej odmiany wp_register_script (), wp_enqueue_script () i wp_localize_script (), aby przekazać wymagany identyfikator i klucz aplikacji danych.
Wypróbowałem kilka różnych odmian tego:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_js() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array('id'=>"dropboxjs",'data-app-key'=>"MY_APP_KEY"));
}
I:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_stuff() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array(array('id'=>"dropboxjs"),array('data-app-key'=>"MY_APP_KEY")));
}
MY_APP_KEY zostaje zastąpiony odpowiednim kluczem aplikacji w moim kodzie. Byłbym wdzięczny za każdy kierunek. Dzięki.
EDYCJA: Próbowałem też zrobić to przy pomocy jquery, ale bezskutecznie. Próbowałem po załadowaniu dokumentu i przygotowaniu dokumentu. Otrzymuję zwrot {„error”: „Invalid app_key”}.
$('script[src="https://www.dropbox.com/static/api/1/dropins.js?ver=3.6"]').attr('id','dropboxjs').attr('data-multiselect','true').attr('data-app-key','MY_APP_KEY');
źródło
wp_localize_script
to jest wydrukować obiekt zakodowany w formacie json na wyjściu HTML strony. Ten obiekt jest rozpoznawany przez skrypt i można go używać. Musisz dodać niektóre atrybuty do tagu skryptu, więcwp_localize_script
nie mogę ci pomóc.wp_localize_script
nie tworzy atrybutów skryptu. Ale czy można przekazać klucz aplikacji bezpośrednio do dropbox.js? Tylko zgadnij, ale próbowałeśarray('appKey'=>"MY_APP_KEY")
? Jest to kod, który pobiera klucz z atrybutuif(!Dropbox.appKey){Dropbox.appKey=(e=document.getElementById("dropboxjs"))!=null?e.getAttribute("data-app-key"):void 0}
wp_localize_script
pewnością możesz przekazać atrybuty do skryptu. Naprawdę nie wiem, czy to zadziała, czy nie, ale nie jest to kwestia związana z niepokojem.Odpowiedzi:
możesz spróbować użyć
script_loader_src
zaczepu filtra, np .:Aktualizacja
właśnie zorientowałem się, że src ucieka przez esc_url, więc szukając trochę więcej, znalazłem
clean_url
filtr, którego można użyć do zwrócenia wartości z identyfikatorem i kluczowymi danymi aplikacji:źródło
<script type='text/javascript' src='https://www.dropbox.com/static/api/1/dropins.js?ver=3.6'id='dropboxjs'data-app-key='MY_APP_KEY'></script>
Od wersji WP 4.1.0 dostępny jest nowy hak filtra, aby łatwo to osiągnąć:
script_loader_tag
Użyj tego w ten sposób:
źródło
OK, wydaje mi się, że
wp_enqueque_scripts
nie jest możliwe wydrukować identyfikatora i klucza aplikacji jako atrybutów znaczników skryptu.Jestem pewien, że na 90%, ponieważ
WP_Dependencies
nie jest to klasa, którą znam dobrze, ale patrząc na kod Wydaje mi się to niemożliwe.Ale jestem pewien, że w 100% użycie nie
wp_localize_script
jest przydatne w twoim zakresie .Jak powiedziałem w moim komentarzu powyżej:
To, czego nie powiedziałem w komentarzu, to to, że obiekt zakodowany w formacie json jako dowolna nazwa, którą decydujesz, patrząc na składnię:
Nazwany obiekt
$object_name
może być używany przez skrypt, ponieważ znajduje się w zasięgu globalnym i jest drukowany w html strony.Ale
$object_name
to nazwa, którą decydujesz, więc może być wszystkim .Zapytaj więc siebie:
w jaki sposób skrypt na zdalnym serwerze Dropbox może korzystać ze zmiennej, której nie znają, jak się nazywa?
Nie ma więc żadnego powodu, aby przekazywać identyfikator i / lub klucz aplikacji do skryptu za pomocą
wp_localize_script
: wystarczy wydrukować je jako atrybuty tagu skryptu, jak powiedziano w dokumentacji API Dropbox.Nie jestem programistą js, ale myślę, że to, co robi skrypt Dropbox, to:
<script>
elementy HTML na stroniePamiętaj, że nie wiem tego na pewno, po prostu zgaduję .
W ten sposób skrypt załadowany z serwera Dropbox może sprawdzić klucz aplikacji w sposób dla nich łatwy i łatwy do wdrożenia.
Ponieważ w pierwszym zdaniu powiedziałem, że nie można wydrukować identyfikatora i klucza aplikacji w skrypcie przy użyciu
wp_enqueque_scripts
, morał tej historii jest taki, że musisz wydrukować je w znaczniku w inny sposób.Sposobem, który nie pachnie zbyt mocno (gdy nie ma alternatywy) jest użycie
wp_print_scripts
haka do wydrukowania znacznika skryptu:źródło
echo
ile mi wiadomo, instrukcja nie wysyła żadnych żądań HTTP, a WordPresswp_enqueue_script
wykonuje również echo (patrz core.trac.wordpress.org/browser/tags/4.9/src/wp-include/... ) Z pewnością można zmniejszyć liczba żądań poprzez połączenie skryptu z innym skryptem, który masz, ale: 1) skrypty istnieją w tym przypadku na serwerze innej firmy 2) z HTTP 2 w dzisiejszych czasach połączenie skryptu zmniejszyłoby wydajność, a nie je zwiększyło. Więc może coś mi umknęło?Z odpowiedzi Bainternet powyżej. Ten kod działał dla mnie.
Edycja: Jedyną różnicą w stosunku do kodu Bainternet jest to, że dodałem warunek, aby sprawdzić, czy adres URL skryptu to dropbox i czy to plik .js.
Ignoruję wszystkie pozostałe adresy URL i przepisuję adres URL skrzynki odbiorczej.
źródło
Sprawdziłem kod dropbox.js (v2), aby zobaczyć, co się dzieje i jak najlepiej rozwiązać ten problem. Jak się okazuje, klucz aplikacji danych służy jedynie do ustawienia zmiennej Dropbox.appKey. Mogę ustawić zmienną z następującą dodatkową linią.
Korzystając z przykładu javascript na stronie Dropbox https://www.dropbox.com/developers/dropins/chooser/js :
W moim kodzie ustawiam Dropbox.appKey w każdym miejscu, w którym odwołuję się do procedur javascript Dropbox. Dzięki temu mogłem używać wp_enqueue_script () bez dodatkowych parametrów.
źródło
Zrobiłem to z moją wtyczką eKartek i jest to naprawdę proste.
Oto bezpośrednia kopia / wklej z wtyczki:
Zauważ, że klucz API jest przekazywany przez opcję.
źródło
Jest na to prostszy sposób
źródło
Składnia Wordpress dla script_loader_tag :
Aby dodać dowolny atrybut, możesz zmodyfikować swój tag $ w ten sposób:
Który poprawnie uniknie adresu URL.
źródło
Dzięki za wszystkie posty, naprawdę pomogły. Rzuciłem własną wersję, aby nadać jej strukturę i ułatwić czytanie i aktualizację. Użyj normalnej kolejki, użyj skryptu dla plików CSS z fałszywym znacznikiem na końcu, aby ładował się u góry. Chociaż można to nieco uprościć.
źródło