Как загрузить скрипты/стили для конкретной страницы
Я знаю, что согласно стандартному процессу загрузки WordPress, сначала вызывается functions.php
, после чего идет всё остальное из темы.
Но сейчас я собираюсь полностью переработать свою тему для оптимизации.
Моя идея заключается в том, чтобы иметь один базовый CSS файл для общих свойств, нормализации и цветов.
Или сохранить один CSS файл, но в этом случае мне нужно жестко прописать конструкцию switch case в functions.php
, чтобы определить страницу.
И другой файл, специфичный для каждой страницы, потому что нет смысла загружать огромный файл стилей со всеми определенными стилями.
Поэтому мой вопрос в том, какое лучшее место для хука загрузки специфических скриптов/стилей?
Должен ли это быть header-xxx.php
или другой файл? Может быть, есть способ реализовать эту идею более масштабируемым и элегантным способом?
Буду благодарен за любую помощь.

Все зависит от масштаба ваших настроек и того, как вы организуете свои файлы. Но есть 2 основных способа сделать это: functions.php и файлы шаблонов.
Мне нравится регистрировать все свои скрипты/стили в functions.php, чтобы знать, с чем я буду работать, но подключать только то, что нужно, когда это необходимо.
Вы можете подключать все условно в файле functions.php (if( is_page( 'blah') { //... подключаем файлы }
) или использовать файлы шаблонов для стилизации конкретных категорий/меток/записей/страниц и т.д.
Затем в этом файле шаблона вы вызываете нужные скрипты/стили. Это также удобный способ понять, что где загружается.
Но определенно, если вы хотите разбить таблицу стилей на меньшие файлы, вам нужно использовать:
Та же логика применима к скриптам с соответствующими функциями register/enqueue.
Также учитывайте количество запросов в вашей стратегии. Если вы разбиваете файлы на несколько частей, старайтесь минимизировать количество загружаемых файлов, чтобы не повлиять отрицательно на скорость загрузки страницы.
Есть еще один способ ускорить загрузку. Если вы укажете браузеру кэшировать ваши стили, то, возможно, 1 (или несколько) файлов с большей вероятностью загрузятся из кэша, чем если у вас множество файлов по всему сайту, которые всегда нужно загружать с сервера, потому что это новый запрос для каждой новой страницы. Держите это в уме.
В любом случае, кэширование одного или нескольких ресурсов — это хороший подход, который повысит воспринимаемую скорость отклика вашего сайта.
Если вам нужно больше информации о том, как использовать эти функции, просто дайте нам знать.
РЕДАКТИРОВАНИЕ
Основные причины регистрации скриптов следующие:
- Упрощает вызов скрипта/стиля, когда он нужен
- Позволяет использовать зарегистрированный скрипт/стиль как зависимость для файла, который нужно загрузить
- Избегает дублирования кода, упрощая наш код
- И другие преимущества, которые сейчас не приходят на ум
ПРИМЕЧАНИЕ
Скрипт/стиль, который был зарегистрирован, не нужно подключать, если он указан как $deps
для файла, который вы сейчас подключаете.
Пример (не обязательно так делать, но чтобы понять суть):
Я зарегистрировал:
- common-style.css
- navigation.css
- buttons.css
Теперь эти стили зарегистрированы, и если я перейду на конкретную страницу и захочу применить другой стиль, я подключаю на этой странице (либо условно в functions.php, либо в шаблоне страницы) specific-style.css
вот так:
add_action( 'wp_enqueue_scripts', 'my_specific_style' );
function my_specific_style(){
wp_enqueue_style( 'specific-style', get_stylesheet_directory_uri() . '/path/to/specific-style.css', array( 'common-style', 'navigation', 'button') );
}
Обратите внимание, что массив в wp_enqueue_style
содержит идентификаторы уже зарегистрированных стилей. WordPress удобно загрузит все 4 файла в правильном порядке, учитывая зависимости.
Вы можете каскадировать зависимости, просто регистрируя каждый скрипт/стиль с правильными зависимостями.
Например, buttons.css зависит от navigation.css, который зависит от common-style.css.
Если я зарегистрирую с такой логикой, мне нужно только подключить specific-style.css с зависимостью от buttons.css, и WordPress автоматически загрузит все в правильном порядке.

Спасибо за отличный ответ, не повлияет ли это на производительность, если я буду регистрировать скрипты/стили wp-register-style/script
для всех своих страниц в functions.php? Каковы преимущества регистрации всех стилей и их подключения только при необходимости?

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

"рефакторинг", "оптимизация", "масштабируемость", "элегантность". Отличные вопросы! Вы на правильном пути. Однако разделение CSS-файла на несколько — не решение этих задач. Вот почему:
Браузеры кэшируют CSS-файлы. Поэтому после загрузки первой страницы браузер не будет запрашивать тот же CSS-файл для следующей страницы. Да, первая загрузка будет чуть медленнее, но это незаметно. Зато все остальные страницы выиграют от этого.
Меньше запросов — один из самых важных способов оптимизировать скорость сайта (см. Steve Souders или эту статью).
Дополнительная оптимизация — минификация вашего CSS (см. пост Google PageSpeed). Спасибо @bynicolas за предложение.
Конечно, вы можете сказать: а как же элегантность? Вот хорошие новости: Sass и LESS. Они позволяют писать меньше кода, разделять его на несколько файлов, которые компилируются в один CSS-файл, и многое другое.

PS: У меня несколько лет назад была та же идея: почему бы не разделить большой CSS-файл на несколько меньших, специфичных для страницы? Это казалось очевидной оптимизацией, пока один из моих коллег не объяснил мне, почему это на самом деле замедлит работу сайта.

Отличный ответ, я немного говорил об этом в своём ответе, но вы хорошо сформулировали. Сначала это может быть неочевидно, но факт кэширования всего на самом деле ускорит работу. Я бы добавил, что минимизация одного большого CSS-файла будет ещё выгоднее, чем загрузка нескольких маленьких.
