Правильный способ поставить в очередь jquery-UI

8

У меня тяжелые времена, включая скрипты и стили jquery-ui в моем плагине. Кажется, мои wp_enqueue_scriptзвонки просто игнорируются.

Уже есть много вопросов, похожих на этот, но все ответы, которые я нашел до сих пор, сводятся к вызову wp_enqueue_scriptвнутри wp_enqueue_scriptsловушки действий, которую я уже делаю.

В конструкторе моего класса я звоню:

add_action( 'wp_enqueue_scripts', array($this, 'enqueue_scripts') );

а затем ниже:

public function enqueue_scripts()
{    
  wp_enqueue_script( 'jquery-ui-core', false, array('jquery') );
  wp_enqueue_script( 'jquery-ui-widget', false, array('jquery') );
  wp_enqueue_script( 'jquery-ui-mouse', false, array('jquery') );
  wp_enqueue_script( 'jquery-ui-accordion', false, array('jquery') );
  wp_enqueue_script( 'jquery-ui-autocomplete', false, array('jquery'));
  wp_enqueue_script( 'jquery-ui-slider', false, array('jquery'));

Я проверил, что код фактически выполняется при каждой загрузке страницы. Однако на страницах отсутствуют <link>теги для библиотеки jquery-ui. Я уже пробовал с и без jqueryзависимости, явно указанной в третьем аргументе wp_enqueue_scriptвызовов.

Я также пробовал с простой установкой WP 4.8 без установленных плагинов, кроме моей, и только с двадцатью семнадцатой темой по умолчанию. Нет кости.

Что не так с моим кодом?

Лусио Круска
источник

Ответы:

20

Прежде всего, WordPress регистрирует пользовательский интерфейс jQuery через wp_default_scripts(). Зависимости уже установлены, поэтому вам нужно поставить в очередь только тот скрипт, который вам действительно нужен (а не ядро). Так как вы не меняете номер версии или что-то еще, можно использовать только ручку.

// no need to enqueue -core, because dependancies are set
wp_enqueue_script( 'jquery-ui-widget' );
wp_enqueue_script( 'jquery-ui-mouse' );
wp_enqueue_script( 'jquery-ui-accordion' );
wp_enqueue_script( 'jquery-ui-autocomplete' );
wp_enqueue_script( 'jquery-ui-slider' );

Что касается таблиц стилей: WordPress по умолчанию не регистрирует стили пользовательского интерфейса jQuery!

В комментариях butlerblog указал, что в соответствии с Руководством по плагину

Не допускается выполнение внешнего кода внутри плагина, когда он не выступает в качестве службы, например:

  • Вызов CDN сторонних производителей по причинам, отличным от включений шрифтов; все не связанные с сервисом JavaScript и CSS должны быть включены локально

Это означает, что загрузка стилей через CDN не разрешена и всегда должна выполняться локально. Вы можете сделать это с помощью wp_enqueue_style().

керосиновой
источник
1
пс: конструктор есть. не оптимальное место . для добавления крючков,
birgire
1
Если вы собираетесь отправить свой плагин в репозиторий wordpress.org, вам необходимо загрузить CSS локально (см. Developer.wordpress.org/plugins/wordpress-org/… ).
butlerblog
1
@butlerblog Спасибо за ввод, я обновил ответ.
Kero
3

Если вы ставите в очередь свой собственный скрипт, вы можете просто добавить 'jquery-ui-accordion', например, в список зависимостей. Все необходимые зависимости будут добавлены автоматически. Пример:

wp_enqueue_script( 'my-theme', get_stylesheet_directory_uri() . '/js/theme.js', array( 'jquery', 'jquery-ui-accordion' ) );

Сгенерирует этот код:

<script type='text/javascript' src='/wp-includes/js/jquery/ui/core.min.js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/ui/widget.min.js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/ui/accordion.min.js'></script>
<script type='text/javascript' src='/wp-content/themes/theme/js/theme.js'></script>
Грег Перхам
источник
1

Я изменил твой сценарий. попробуйте с этим, это работает.

add_action( 'wp_enqueue_scripts', array($this, 'enqueue_scripts') );
public function enqueue_scripts()
{    
  wp_enqueue_script( 'jquery-ui-core');
  wp_enqueue_script( 'jquery-ui-widget');
  wp_enqueue_script( 'jquery-ui-mouse');
  wp_enqueue_script( 'jquery-ui-accordion' );
  wp_enqueue_script( 'jquery-ui-autocomplete');
  wp_enqueue_script( 'jquery-ui-slider');
}
umesh.nevase
источник
К сожалению, в моем случае это не работает.
Лусио Круска
@LucioCrusca Пожалуйста, смотрите мой ответ. Хотя WordPress регистрирует сценарии пользовательского интерфейса jQuery , он не делает это для стилей , вам нужно сделать это самостоятельно, как я показал
kero,