Я столкнулся с этим, когда пытался интегрировать Dropbox Drop Chooser API в плагин, который я пишу.
Документация по API предписывает вам разместить следующий script
тег в верхней части вашего файла:
<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>
Все хорошо, и это действительно работает, когда я непосредственно вставляю его в страницу, которая вызывается в разделе администратора. Но я хотел бы использовать некоторые варианты wp_register_script (), wp_enqueue_script () и wp_localize_script () для передачи необходимого идентификатора и data-app-key.
Я пробовал пару разных вариантов этого:
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"));
}
И:
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 заменен соответствующим ключом приложения в моем коде. Был бы признателен за любое направление. Благодарю.
РЕДАКТИРОВАТЬ: Также пытался сделать это с некоторыми jquery, но безрезультатно. Попробовал его при загрузке документа и при готовности документа. Я получаю {"error": "Invalid app_key"} return.
$('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');
источник
wp_localize_script
нужно сделать, это напечатать json-кодированный объект в html-выводе страницы. Этот объект распознается сценарием, и вы можете использовать его. То, что вам нужно, это добавить некоторые атрибуты в тег скрипта, и поэтомуwp_localize_script
не может помочь вам.wp_localize_script
не создает атрибуты сценария. Но можно ли передать ключ приложения прямо в dropbox.js? Просто предположение, но вы пробовалиarray('appKey'=>"MY_APP_KEY")
? Это код, который получает ключ от атрибутаif(!Dropbox.appKey){Dropbox.appKey=(e=document.getElementById("dropboxjs"))!=null?e.getAttribute("data-app-key"):void 0}
wp_localize_script
уверенностью вы можете передать атрибуты в сценарий. Я действительно не знаю, сработает ли это или нет, однако это не связано с проблемами.Ответы:
Вы можете попытаться использовать
script_loader_src
фильтр, например:Обновить
Я сам понял, что src избежал esc_url, поэтому, посмотрев немного больше, я нашел
clean_url
фильтр, который вы можете использовать для возврата значения с вашим идентификатором и данными ключа приложения:источник
<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>
Начиная с WP 4.1.0, для достижения этой цели легко доступен новый фильтр-хук:
script_loader_tag
Используйте это так:
источник
Хорошо, кажется (мне) , что с
wp_enqueque_scripts
не возможно печатать идентификатор и ключ приложения в качестве атрибутов тега скрипта.Я уверен на 90%, потому что
WP_Dependencies
это не тот класс, который я хорошо знаю, но, глядя на код, мне это кажется невозможным.Но я уверен на 100% , что , используя
wp_localize_script
это не полезно для вашего объема .Как я уже сказал в моем комментарии выше:
Что я не сказал в комментарии, так это то, что json-кодированный объект - это произвольное имя, которое вы решаете, фактически, глядя на синтаксис:
Именованный объект
$object_name
может использоваться сценарием, потому что он находится в глобальной области видимости и печатается в html-странице.Но
$object_name
это имя, которое вы решаете, так что это может быть что угодно .Так что спросите себя:
как скрипт на удаленном сервере Dropbox может использовать переменную, которую они не знают, как она называется?
Так что нет никакой причины передавать идентификатор и / или ключ приложения в скрипт
wp_localize_script
: вам нужно просто напечатать их как атрибуты тега скрипта, как сказано в документации Dropbox API.Я не являюсь разработчиком js, но я думаю, что скрипт dropbox:
<script>
элементы HTML на страницеПожалуйста, обратите внимание, что я не знаю это наверняка, я просто догадываюсь .
Таким образом, скрипт, загруженный с сервера Dropbox, может проверить ключ вашего приложения так, чтобы он был легким для них и простым для реализации.
Потому что в первом предложении я сказал , что это не возможно , чтобы напечатать идентификатор и ключ приложения в сценарии с использованием
wp_enqueque_scripts
, мораль этой истории является то , что вы должны напечатать их в разметке и по - другому.Способ, который не пахнет слишком много (когда нет альтернатив), состоит в том, чтобы использовать
wp_print_scripts
ловушку, чтобы напечатать тег сценария:источник
echo
Заявление не любой запрос HTTP, насколько я могу судить, и WordPresswp_enqueue_script
делает эхо , а также (см core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/... ) Конечно , вы могли бы уменьшить количество запросов путем объединения сценария с некоторым другим имеющимся сценарием, но: 1) сценарии существуют на стороннем сервере в этом случае 2) с HTTP 2 в настоящее время объединение сценария приведет к снижению производительности, а не к их увеличению. Так может я что-то упустил?От Bainternet ответ выше. Этот код работал для меня.
Изменить: Единственное отличие от кода Bainternet заключается в том, что я добавил условие, чтобы проверить, является ли URL-адрес сценария dropbox и является ли он файлом .js.
Я игнорирую все остальные URL-адреса и переписываю URL-адрес dropbox.
источник
Я сделал некоторые проверки в коде dropbox.js (v2), чтобы увидеть, что происходит и как лучше всего это решить. Как оказалось, data-app-key используется только для установки переменной Dropbox.appKey. Я смог установить переменную со следующей дополнительной строкой.
Использование примера JavaScript на странице Dropbox https://www.dropbox.com/developers/dropins/chooser/js :
В моем коде я установил Dropbox.appKey в каждом месте, где я ссылаюсь на подпрограммы JavaScript Dropbox. Это позволило мне использовать wp_enqueue_script () без дополнительных параметров.
источник
Я сделал это с моим плагином eCards, и это действительно просто.
Вот прямая копия / вставка из плагина:
Обратите внимание, что ключ API передается через опцию.
источник
Есть более простой способ сделать это
источник
Синтаксис Wordpress для script_loader_tag :
Чтобы добавить любой атрибут, вы можете изменить свой тег $ следующим образом:
Который будет правильно экранировать URL.
источник
Спасибо за все сообщения, они действительно помогли. Я сделал свою собственную версию, чтобы придать ей некоторую структуру и облегчить ее чтение и обновление. Используйте enqueue как обычно, используйте скрипт для CSS-файлов с ложным тегом в конце, чтобы он загружался вверху. Хотя, возможно, это можно несколько упростить.
источник