Задать вопрос
@Shimpanze

Как добавить собственные скрипты в функцию add_action('wp_enqueue_scripts')?

Здравствуйте!

Стоит задача, при подключении своего шаблона для вывода определённой категории, полностью очистить содержимое функции wp_head().

С этим отлично справляется функция remove_all_actions('wp_head').

Но после этого мне необходимо подключить уже свои стили и скрипты в неё же (ранее очищенную).

Почему не срабатывает вот эта конструкция?

1. Вычищаю:

remove_all_actions('wp_head');

2. Добавляю свой файл стилей через стандартный хук 'wp_enqueue_scripts':

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_style('main', get_template_directory_uri() . '/animals/styles.css', false, '0.0.0', 'all');
});


... пробовал даже так (тоже не срабатывает):

add_action('wp_head', function() {
  add_action('wp_enqueue_scripts', function() {
    wp_enqueue_style('project-main', get_project_directory_url() . '/animals/styles.css', false, '0.0.0', 'all');
  });
});


Подскажите, пожалуйста, как в очищенную функцию wp_head() заново начать добавлять свои файлы через 'wp_enqueue_scripts'?

Спасибо!
  • Вопрос задан
  • 285 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
kobyakovdima
@kobyakovdima
Любитель экспериментов
Можете так попробовать сделать (я вставлял код в functions.php темы):

remove_all_actions( 'wp_head' );

// Это также сработает и на хуке wp_footer
add_action( 'wp_head', function () {
    wp_enqueue_script( 'my-script', get_template_directory_uri() . '/assets/js/homepage.js' );
} );


Ваш скрипт будет автоматически выведен на хуке wp_footer (с учётом, что в шаблоне используется функция wp_footer() соответственно).

Как это работает?

В движке есть такой код:
add_action( 'wp_head', 'wp_enqueue_scripts', 1 );

То есть на хуке wp_head запускается функция wp_enqueue_scripts() с одноименным хуком внутри. Так как мы удалили все зарегистрированные функции с хука wp_head, то функция wp_enqueue_scripts() вызвана не будет и хук wp_enqueue_scripts не зарегистрируется.

При вызове wp_enqueue_script() напрямую, данные о скрипте будут добавлены на вывод, но так как на wp_enqueue_scripts они вывестись не смогут (хука-то такого уже нет), то автоматом перенесутся на хук wp_footer -> wp_print_footer_scripts() -> хук wp_print_footer_scripts -> _wp_footer_scripts().
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы