Объявление зависимостей сценариев между сценариями, поставленными в очередь с различными крючками действий


Рассмотрим этот сценарий:

Я поставил в очередь несколько сценариев в своей пользовательской теме. Затем я приступил к созданию плагина, который я хочу использовать только с этой темой. Я хочу поставить в очередь другие сценарии в моем плагине, которые зависят от сценариев, поставленных в очередь в теме. Стандартным способом объявления зависимостей скриптов в wordpress является передача массива зависимостей в wp_enqueue_script. Например:

wp_enqueue_script('tagsinput-scripts', plugin_dir_url( __FILE__ ) . 'js/tagsinput/bootstrap-tagsinput.min.js', array('bootstrap-js'), '130215', false);

Не будет поставлен в очередь, пока bootstrap-js не будет поставлен в очередь.

Представьте себе что приведенный выше скрипт был поставлен в очередь моим плагином с крючком действия admin_enqueue_scripts, в то время как bootstrap-js был поставлен в очередь в теме с крючком действия wp_enqueue_scripts.

Может ли зависимость между tagsinput-scripts и bootstrap-js быть правильно решена Wordpress в этом сценарии, когда два сценария, в которых поставлены в очередь, используют разные крючки действий?

Author: luqo33, 2015-03-15

2 answers

Простой ответ - "Нет". Хотя admin_enqueue_scripts и wp_enqueue_scripts крючки делают одно и то же, они выполняют свою работу в разных местах, которые не имеют никакого отношения к другим.

  • wp_enqueue_scripts работает на общедоступной стороне или на переднем конце

  • admin_enqueue_scripts Как следует из названия, он работает на стороне администратора или серверной части

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

Ты вам придется подключить ваш bootstrap-js к обоим крючкам, чтобы это сработало, это гарантирует, что ваша зависимость также будет работать

Пример:

add_action( 'wp_enqueue_scripts', 'enqueue_bootstrap_js' );
add_action( 'admin_enqueue_scripts', 'enqueue_bootstrap_js' );

function enqueue_bootstrap_js()
{
    //Register and enqueue your bootstrap-js script
}

add_action( 'wp_enqueue_scripts', 'tagsinput_scripts' );

function tagsinput_scripts()
{
    wp_enqueue_script('tagsinput-scripts', plugin_dir_url( __FILE__ ) . 'js/tagsinput/bootstrap-tagsinput.min.js', array('bootstrap-js'), '130215', false);
}
 1
Author: Pieter Goosen, 2015-03-16 04:33:58

Простой ответ - "Да".

Использование wp_enqueue_scripts или admin_enqueue_scripts делает сценарий зависимостью, однако он будет вызываться только в локальной среде. Таким образом, только в теме или плагине, где вы его регистрируете. Однако то, что ни Питер Гусен, ни WordPress не говорят вам, заключается в том, что вы можете использовать крючок wp_default_scripts для регистрации сценария установки.

Как использовать? Смотрите примечание ниже, что в настоящее время ожидает модерации для "Пользовательских заметок" тот wp_default_scripts крючок для действий на ресурсах разработчика WordPress.


Добавьте скрипт, на который вы можете ссылаться из любой точки вашей установки WordPress, используя wp_enqueue_script или admin_enqueue_script.

Сначала настройте крючок, например, в вашем плагине.

add_action('wp_default_scripts', function(&$scripts) {
  // Arguments order: `$scripts->add( 'handle', 'url', 'dependencies', 'version', 'in_footer' );`
  // Set "in_footer" argument to 1 to output the script in the footer.
  $scripts->add('my-plugin-script', '/path/to/my-plugin-script.js', array('jquery'), 'alpha', 1);
});

Теперь вы можете использовать скрипт из плагина в любом месте, например, в своей теме.

add_action('wp_enqueue_scripts', function () {
  // Note the third argument: `array('my-plugin-script')`
  wp_enqueue_script('my-theme-script', '/path/to/my-theme-script.js', array('my-plugin-script'), null, true);
});

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

 2
Author: luukvhoudt, 2018-01-06 22:40:57