coderisimo
@coderisimo

Есть ли способ загрузить JS скрипт для плагина в HEAD на WP без правки functions?

Пишу плагин для WP.
Прописываю в самом плагине подключение нужных скриптов через :
wp_enqueue_script('jquery-ui-tabs');
 wp_enqueue_script('jquery-ui-dialog');
//далее
 add_action( 'wp_enqueue_scripts', 'my_scripts' );

пытался цепляться к разным хукам, но в результате всегда скрипты подключаются в футере. Соответственно , моя разметка грузится быстрее , чем нужный JS , что в данном случае приводит к корявостям в отображении тех же табов. Можно ли инструментами только плагина, без правки functions, грузить нужные скрипты в HEAD ?
Спасибо.
  • Вопрос задан
  • 665 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Jquery Ui грузится в футер по умолчанию, для переподключения надо переопределить это дело.
// в админке осталяем как было
    if( ! is_admin() ) { 
//переопределяем загрузку ядра
    wp_deregister_script( 'jquery-ui-core' );
    wp_enqueue_script( 'jquery-ui-core', site_url(  '/wp-includes/js/jquery/ui/core.min.js' ), array('jquery') );
//переопределяем загрузку api виджетов
    wp_deregister_script( 'jquery-ui-widget' );
    wp_enqueue_script( 'jquery-ui-widget', site_url(  '/wp-includes/js/jquery/ui/widget.min.js' ), array('jquery') );
// табы
    wp_deregister_script( 'jquery-ui-tabs' );
    wp_enqueue_script( 'jquery-ui-tabs', site_url(  '/wp-includes/js/jquery/ui/tabs.min.js' ), array('jquery') );
//диалог
    wp_deregister_script( 'jquery-ui-dialog' );
    wp_enqueue_script( 'jquery-ui-dialog', site_url(  '/wp-includes/js/jquery/ui/dialog.min.js' ), array('jquery') );

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@mr_ko
Javascript, Node.js. React.js, Vue.js, Wordpress
По умолчанию скрипты должны выводится в Хедере https://codex.wordpress.org/Function_Reference/wp_... если поставить последний параметр в true тогда будет в футере. Возможно у вас какой то плагин, или в теме прописан вывод в футере.
Ответ написан
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
тема дефолтная в том то и дело (((

function my_scripts(){

wp_enqueue_style('fitness_calc_css',plugins_url('fitness_calc/ui/jquery-ui.css'));
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-tabs');
wp_enqueue_script('jquery-ui-dialog');
wp_enqueue_script('jquery-ui-tooltip');
wp_enqueue_script('fitness_calc',plugins_url('fitness_calc/fitness_calc.js'),array(),false,true);
}

add_action( 'wp_head', 'my_scripts' );

хуки пробовал и другие . ума не приложу куда копать ((
Ответ написан
Комментировать
Рабочий вариант. Скрипты \ стили всегда должны подключаться через wp_enqueue_scripts \ wp_enqueue_styles соответственно.
function my_scripts() {
    wp_enqueue_script(
        'fitness_calc', 
        plugins_url('fitness_calc/fitness_calc.js'), 
        array(), null,
        false // этот - последний - параметр указывает, в футере выводить или нет
    );
}
add_action('wp_enqueue_scripts',  'my_scripts', 100);


Соответственно , моя разметка грузится быстрее , чем нужный JS

А вообще, это нормально, равно как и размещение скриптов в футере. Почему бы не активировать js-логику (табы, как пример) только когда DOM будет готов к этому, а скрипты загрузятся?.. До этого момента показывать пользователю разметку + начальное активное состояние (выделенный таб, например), либо, если это невозможно - прелоадер. Например, добавить класс .loader, и убирать его при загрузке.

Выносить скрипт в шапку в подавляющем большинстве случаев костыль и неправильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы