Проверьте, не помещен ли jQuery или прототип в очередь другим плагином?


В моем плагине я хочу проверить, будет ли jQuery или прототип (или оба) загружены другим плагином. Итак, у wp_enqueue_script('jquery') или wp_enqueue_script('prototype') уже был вызван.

У меня есть код, соответствующий моему плагину в файлах plugin.prototype.js и plugin.jquery.js, и если прототип поставлен в очередь, мой плагин будет использовать plugin.prototype.js. Таким образом, я избегаю загрузки на сайт больше, чем необходимо. Если ни один из них не загрузился, я поставлю в очередь тот, который меньше.

Как я могу проверить, чтобы увидеть, что было встали в очередь? Как мне убедиться, что мой код выполняется последним?

Author: artlung, 2010-08-12

2 answers

Используйте wp_script_is(), чтобы проверить, находится ли скрипт в очереди.

function add_my_scripts() {
    $doing_jquery = wp_script_is('jquery', 'queue');
    $doing_prototype = wp_script_is('prototype', 'queue');

    var_dump($doing_jquery, $doing_prototype);
}
add_action('wp_print_scripts', 'add_my_scripts');
 11
Author: Annika Backstrom, 2010-08-12 14:42:20

Чтобы убедиться, что ваш код запускается после загрузки jQuery или прототипа, используйте параметр $deps для wp_enqueue_script и передайте либо array('jquery'), либо array('prototype'). Если вы хотите узнать, находится ли скрипт в очереди, вы можете использовать метод query() WP_Dependencies ( который является суперклассом WP_Scripts). Так что что-то вроде этого должно сработать:

global $wp_scripts;
$jQueryIsLoaded = (bool) $wp_scripts->query('jquery');
$prototypeIsLoaded = (bool) $wp_scripts->query('prototype');

Конечно, плагины могут ставить их в очередь после того, как вы выбрали один из них, поэтому постарайтесь выполнить эту проверку в последний возможный момент.

 2
Author: Jan Fabry, 2010-08-12 14:05:03