it-swarm.xyz

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

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

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

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

5
artlung

Используйте 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
Annika Backstrom

Чтобы убедиться, что ваш код выполняется после загрузки jQuery или Prototype, используйте параметр $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
Jan Fabry