Почему не подключаются javascript-скрипты в head?

Ссылка скопирована
1 ответ

Почему не подключаются javascript-скрипты в head?

В :

<head>   <meta charset="UTF-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title><?php bloginfo('description'); ?></title>    <?php wp_head() ?>  </head>

<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php bloginfo('description'); ?></title> <?php wp_head() ?> </head>

functions.php:

<?php add_action('wp_enqueue_scripts', 'my_style'); add_action('wp_enqueue_scripts', 'my_scripts'); add_action('admin_init', 'disable_content_editor'); // Отключаем редактор страниц в админке поскольку используем ACF  function my_style() {   wp_enqueue_style('main-style', get_stylesheet_uri()); }  function my_scripts() {   wp_enqueue_script('main-script', get_template_directory_uri() . '/assets/js/main.min.js', array(), null, true); }  function disable_content_editor() {   if (isset($_GET['post'])) {     $post_ID = $_GET['post'];   } else if (isset($_POST['post_ID'])) {     $post_ID = $_POST['post_ID'];   }    if (!isset($post_ID) || empty($post_ID)) {     return;   }    $disabled_IDs = array(2);   if (in_array($post_ID, $disabled_IDs)) {     remove_post_type_support('page', 'editor');   } }  require get_template_directory() . '/functions/ajax-more-news.php';

<?php add_action('wp_enqueue_scripts', 'my_style'); add_action('wp_enqueue_scripts', 'my_scripts'); add_action('admin_init', 'disable_content_editor'); // Отключаем редактор страниц в админке поскольку используем ACF function my_style() { wp_enqueue_style('main-style', get_stylesheet_uri()); } function my_scripts() { wp_enqueue_script('main-script', get_template_directory_uri() . '/assets/js/main.min.js', array(), null, true); } function disable_content_editor() { if (isset($_GET['post'])) { $post_ID = $_GET['post']; } else if (isset($_POST['post_ID'])) { $post_ID = $_POST['post_ID']; } if (!isset($post_ID) || empty($post_ID)) { return; } $disabled_IDs = array(2); if (in_array($post_ID, $disabled_IDs)) { remove_post_type_support('page', 'editor'); } } require get_template_directory() . '/functions/ajax-more-news.php';

Удивительно то, что теги со скриптами подключаются только в Firefox, а в других браузерах нет. WTF?

Дополнительно:

Так у вас последний параметр в wp_enqueue_script указан как true, что означает подключать скрипт в wp_footer()

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Ваш скрипт подключается через wp_enqueue_script() с последним аргументом true. Это значит, что WordPress выводит его не в head, а перед закрывающим </body>. Поэтому в head Вы его не видите — это нормальное поведение.

Сейчас у Вас:

wp_enqueue_script(
    'main-script',
    get_template_directory_uri() . '/assets/js/main.min.js',
    array(),
    null,
    true
);

wp_enqueue_script( 'main-script', get_template_directory_uri() . '/assets/js/main.min.js', array(), null, true );

Если принципиально нужно вывести именно в head, последний аргумент должен быть false:

wp_enqueue_script(
    'main-script',
    get_template_directory_uri() . '/assets/js/main.min.js',
    array(),
    null,
    false
);

wp_enqueue_script( 'main-script', get_template_directory_uri() . '/assets/js/main.min.js', array(), null, false );

Но в большинстве случаев подключать JS в футере лучше: страница быстрее начинает рендериться, а скрипт видит DOM. Если Ваш код зависит от элементов страницы, оставляйте true и оборачивайте JS в DOMContentLoaded или ставьте defer.

Ещё один момент: если это дочерняя тема, используйте get_stylesheet_directory_uri(), а не get_template_directory_uri(). Первый указывает на активную дочернюю тему, второй — на родительскую.

Проверьте также, что в теме есть оба вызова:

&lt;?php wp_head(); ?&gt;
...
&lt;?php wp_footer(); ?&gt;

&lt;?php wp_head(); ?&gt; ... &lt;?php wp_footer(); ?&gt;

Если wp_footer() отсутствует, скрипты с выводом в footer действительно не появятся. Это частая ошибка в самописных темах.

Итого: скрипт не “не подключается”, а выводится в футере из-за последнего аргумента true. Если нужен head — ставьте false. Если нужен правильный WordPress-подход — оставляйте footer, проверьте wp_footer() и не подключайте JS вручную в header.php.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно