Intereting Posts
Отсутствуют поля страницы профиля пользователя WordPress. электронная почта отправляется из wordpress@domain.com, хотя у меня есть что-то другое Как сортировать сообщения по значениям метаданных массива? Ограничение количества терминов таксономии (изображений) Лучший способ справиться с отсутствием заголовков в микроблоге Пользовательский запрос не разбивается на страницы Скрыть категории от авторов Лучший способ разработки многопользовательской системы и развертывания на другом сервере? RSS-лента cURL error 52? Импорт напрямую в DB – GUID Question Как можно использовать переменную в качестве имени функции обратного вызова для add_settings_field Перемещено wordpress от localhost к live и wp-admin показывает белый экран Как я могу настроить время подачи RSS, чтобы обновить канал быстрее Как получить значение настроек WordPress для настройки Как я могу использовать кеширование фрагментов, чтобы исключить кеширование определенных плагинов?

Можно ли использовать wp_script_is в pluginA, если скрипт находится в очереди или зарегистрирован из модуля pluginB?

Можно wp_script_is использовать wp_script_is в pluginA если скрипт находится в pluginA или зарегистрирован из pluginB ?

У меня есть два плагина, оба из которых используют Angular. Один плагин (pluginA) имеет angular.min.js , загружаемый по всем страницам. Другой (pluginB) имеет angular.min.js , загружаемый только на один. Я хотел бы проверить, был ли pluginA уже установлен в Angular, но я хочу сделать это из pluginB .

Например, я попробовал

 $handle = 'myAppScript.min.js' // this is a concatenated/minified version of the entire pluginA angular app. $list = 'enqueued' // I also tried all the other $list options. // if 'myAppScript.min.js' is present, don't register Angular again, otherwise register it. if (wp_script_is($handle, $list)) { return; } else { wp_register_script( $this->plugin_name . '-ajs', plugin_dir_url(__FILE__) . 'js/angular/angular.min.js', array(), $this->version, false ); } 

Однако wp_script_is возвращает false независимо от того, что я пытаюсь (я дважды проверял с помощью var_dump ), и поэтому снова добавляет Angular.

Спасибо за любую помощь, которую вы можете дать!

Обновление. У меня есть рабочее решение для моей конкретной проблемы с использованием is_plugin_active , но мне все же интересно, есть ли ответ на вопрос. Благодаря!

  $plugin = 'pluginA/pluginA.php'; include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); if (!is_plugin_active($plugin)) { wp_register_script( $this->plugin_name . '-ajs', plugin_dir_url(__FILE__) . 'js/angular/angular.min.js', array(), $this->version, false ); } 

Solutions Collecting From Web of "Можно ли использовать wp_script_is в pluginA, если скрипт находится в очереди или зарегистрирован из модуля pluginB?"

Теперь, когда я вижу, что вы подключались к plugins_loaded , это имеет смысл, потому что он запускается намного раньше, чем wp_enqueue_scripts . Ожидается, что ваша функция вернет 0 в этот момент.

См. Здесь и здесь для порядка, в котором обычно выполняются действия.

Попытайтесь добавить действие в wp_enqueue_scripts с более поздним приоритетом, чтобы убедиться, что он запускается после других скриптов в wp_enqueue_scripts . Затем вы можете отменить регистрацию скрипта и снова зарегистрироваться с новыми параметрами.

Если вы попытаетесь зарегистрировать или зарегистрировать уже зарегистрированный дескриптор с разными параметрами, новые параметры будут проигнорированы. Вместо этого используйте wp_deregister_script () и снова зарегистрируйте сценарий с новыми параметрами.

Изменить: Извините, я неправильно понял это. is_plugin_active не является действием и сразу же возвращает true, не сообщая вам, установлен ли скрипт. По-прежнему стоит, что вы должны подключить функцию wp_script_is к wp_enqueue_scripts или позже.

Вы на правильном пути. Нет лучшего способа определить, что скрипт установлен в очередь или нет. Это эффективный способ wp_script_is ($ handle, $ list)

Просто интересно, правильно ли указано ваше имя дескриптора. Убедитесь, что $ handle при проверке wp_script_is совпадает с тем, как вы вставляете скрипт в pluginB. Первый параметр – $ handle. Обратитесь к этому WP Codex .

В нем говорится:

параметры

$ ручка

(строка) (обязательно) Имя скрипта. Должно быть уникальным.

Я считаю, что вы используете имя плагина в качестве дескриптора в другой части.

Попробуйте использовать одно и то же имя «AngularJS» или что-то подобное, но должно быть таким же, как $ handle

Возможно, я ошибаюсь, но согласно WP codex:

 wp_script_is( string $handle, string $list = 'enqueued' ) 

$handle – уникальное имя скрипта

Насколько я вижу, вы используете FILE NAME, а это неправильно. По мне это не имеет никакого отношения, когда срабатывают действия / перехватчики, оба из ваших плагинов plugins_loaded .

Итак, если вы проверите это так

 $handle = 'MY_SCRIPT_NAME'; /* can't really be $this->plugin_name . '-ajs' because it gives 2 different strings */ 

в обоих ваших плагинах будет загружен только один экземпляр требуемого JS-файла.