Intereting Posts
Информация о теме в файле style.css Как показать родительские сообщения с пустым дочерним элементом, если у выбранного фильтра таксономии выбран ребенок? Плагин галереи изображений с возможностью открытия галереи из текстовой ссылки Заголовок сайта и таблица в Pagelines Панель параметров DMS Как переместить логотип в теме «Двадцать семнадцать» Далее в строке меню Мои постоянные ссылки на все страницы и сообщения теперь включают старые названия страниц в качестве родителей / категорий Перенаправление DNS без нарушения всего Как включить пользовательскую форму оплаты в WordPress? Как сделать изображение больше с помощью wp_get_image_editor Код состояния Phantom 302 при отправке запросов POST на страницах Показывать количество проданных товаров, но сначала не менее 2 Я хочу заменить слово в моей теме другим в wordpress Получить список пользователей на основе некоторых условий Как заставить загрузку в области администратора? Как безопасно сохранять пароль в качестве поля настроек

Загрузка Modernizr (или других библиотек JavaScript) для использования в плагине

Загрузите копию Modernizr , поместите ее в каталог своего плагина и просто установите в очередь скрипт, когда это необходимо. Готово.

Проблема в том, что Modernizr уже может быть загружен другим плагином . Вы не захотите загружать его более одного раза. Как вы можете узнать, доступен ли Modernizr уже до того, как он будет выставлен сам? Это действительно для любой другой библиотеки JavaScript.

Вы можете проверить, загружен ли сценарий с помощью функции wp_script_is() . Однако эта функция ожидает имя дескриптора, на котором был зарегистрирован скрипт. Вы можете только догадываться, да? Даже если предположить, что имя дескриптора просто «modernizr», как вы проверяете определенную версию (например, 2.6.1)? Или, что еще хуже, поскольку пользовательские сборки Modernizr возможны, как вы можете проверить, какие функции вам нужны?

Вся wp_enqueue_script() отлично wp_enqueue_script() для библиотек, которые по умолчанию поставляются с WordPress, таких как jQuery, jQuery UI, Thickbox и т. Д. Их имена дескрипторов документированы, и вы знаете, какую версию ожидать. Конечно, WordPress не предоставляет такие мастер-файлы для всех библиотек JavaScript.

Я что-то упустил здесь или это просто грязная ситуация, с которой вам приходится иметь дело при разработке плагинов?

wp_enqueue_script() использует класс WP_Scripts , который расширяет класс WP_Dependencies . Если вы проверите этот класс, вы увидите кучу массивов вверху. Таким образом, вы можете на самом деле перебирать список сценариев в очереди так:

 global $wp_scripts; // If inside a function foreach($wp_scripts->queue as $script) { // Do some tomfoolery here... ;) } 

Кроме того, если вы используете wp_enqueue_script() , он не будет загружать сценарий более одного раза. Это на самом деле проверяет, было ли это помещён, так что я думаю, что выше спорно так или иначе. Хорошо знать в любом случае.

Рекомендации:

http://core.trac.wordpress.org/browser/tags/3.4.1/wp-includes/functions.wp-scripts.php

http://core.trac.wordpress.org/browser/trunk/wp-includes/class.wp-dependencies.php

http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Если плагин хорошо написан, он должен использовать wp_enqueue_script() и таким образом решает вашу проблему.

Если плагин плохо написан и загружает его другим способом, вам придется использовать некоторые хакерские решения для соответствия по имени, версии, заголовку или чему-то еще более интересному. Невозможно контролировать, как люди пишут плагины, особенно из-за того, что они меняют имена файлов.

Вы также можете проверить, загружен ли модернизатор с помощью javscript.

Это действительно не имеет значения, если оба автора плагина придерживаются стандартов. Я предполагаю, что вы говорите об аресте в админ-части. Оба плагина должны размещаться только на своих страницах администратора, чтобы не возникало конфликта. Даже если это произойдет – это не конец света, так как загрузка 2-х копий не вызовет ошибки JavaScript, и вы можете проверить, какая версия modernizr загружена с помощью Modernizr._version .