Подключаем скрипты и стили

К фронтэнду (лицевой части сайта)

Скопировано
if ( ! defined( 'TEMPLATE_DIRECTORY_URL' ) ) define( 'TEMPLATE_DIRECTORY_URL', get_stylesheet_directory_uri() );
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'main', TEMPLATE_DIRECTORY_URL . '/style.css', array(), '1.0' );
wp_enqueue_script( 'main', TEMPLATE_DIRECTORY_URL . '/js/script.js', array(), '1.0', true );
});
Показать код

В этом примере мы подключаем один файл скриптов и один файл стилей к лицевой части сайта. То есть после подключения содержимое этих файлов будет непосредственно влиять на то, как отображается наш сайт для пользователей.

В строке 1 мы определяем константу TEMPLATE_DIRECTORY_URL. Просто для удобства, чтобы когда будет много строк подключения разных скриптов и разных стилей не писать везде вызов функции get_stylesheet_directory_uri(), а подставлять эту константу.

Слово main в строках 3 и 4 - это идентификатор подключаемого файла скрипта или файла стилей. Он может быть любым, но главное, чтобы он был уникальным в рамках всего сайта. Файл стилей и файл скриптов могут иметь совпадающий идентификатор, как в этом примере. Но если он будет одинаковый у двух файлов стилей или двух файлов скриптов, то к сайту в результате подключится только 1 из них.

В строке 3 мы подключаем файл стилей с названием style.css, который должен располагаться в корне используемого шаблона. В строке 4 мы подключаем файл скриптов с названием script.js, который должен располагаться в папке js расположенной в корне используемого шаблона. Вы можете расположить ваши файлы скриптов и стилей шаблона в другом месте, но тогда в этих строках надо изменить относительные пути к ним.

1.0 в строках 3 и 4 это указание версии ваших файлов. Можно их стереть - тогда WordPress добавит к ним версию своего движка. Можно писать в качестве версии дату последнего изменения файла для удобства. Как это сделать - читаем ниже.

Принудительное обновление JS и CSS файлов в браузере пользователя при их изменении

При первом обращении к сайту браузер пользователя может закэшировать полученные от него JS и CSS файлы. И тогда при повторном открытии страницы он возьмет их из кэша, а не будет скачивать заново. Это хорошо для быстродействия. Но может сложиться ситуация, что мы внесли изменение в JS или CSS код, а пользователь эти изменения не увидел.

Чтобы этого избежать, можно подключать эти файлы с номером версии, который будет динамически меняться при изменении самих файлов. В результате пользователь будет получать эти файлы из кэша своего браузера до тех пор, пока они не изменятся (а значит изменится их версия).

Для этого вместо фиксированного номера версии как в примере выше, мы будем использовать для его формирования PHP функцию get_theme_file_path().

Скопировано
if ( ! defined( 'TEMPLATE_DIRECTORY_URL' ) ) define( 'TEMPLATE_DIRECTORY_URL', get_stylesheet_directory_uri() );
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'main', TEMPLATE_DIRECTORY_URL . '/style.css', array(), filemtime( get_theme_file_path( 'style.css' ) ) );
wp_enqueue_script( 'main', TEMPLATE_DIRECTORY_URL . '/js/script.js', array(), filemtime( get_theme_file_path( 'js/script.js' ) ), true );
});
Показать код

Подключаем скрипт только на нужной странице

Допустим, что у нас есть скрипт, который мы хотим подключить только на одной конкретной странице сайта, чтобы не утяжелять им остальные страницы, где он не нужен. Код может быть таким:

Скопировано
add_action( 'wp_enqueue_scripts', function() {
if( get_the_ID() != 555 ) return;
wp_enqueue_script( 'main', TEMPLATE_DIRECTORY_URL . '/js/script.js', array(), '1.0', true );
});
Показать код

В строке 2 надо указать верный ID страницы.

Подключаем скрипт только на странице с определенным шорткодом

Скопировано
add_action( 'wp_enqueue_scripts', function() {
global $post;
if( ! has_shortcode( $post->post_content, 'my-shortcode' ) ) return;
wp_enqueue_script( 'main', TEMPLATE_DIRECTORY_URL . '/js/script.js', array(), '1.0', true );
});
Показать код

Здесь мы проверяем, что если в тексте текущей страницы есть шорткод [my-shortcode], то только в этом случае подключаем скрипт. Причем шорткод не только должен быть в тексте страницы, но и должен быть зарегистрирован через функцию add_shortcode.

Подключаем свои стили последними

Иногда бывает нужно подключить какие-то стили последними, чтобы они подключались после всех остальных стилей (например, добавляемых плагинами).

Вариант 1

Пробуем добавить приоритет хука wp_enqueue_scripts:

Скопировано
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'main', TEMPLATE_DIRECTORY_URL . '/style.css', array(), '1.0' );
}, 99 );
Показать код

Вариант 2

Подключаем стили через хук wp_print_styles:

Скопировано
add_action( 'wp_print_styles', function() {
wp_enqueue_style( 'main', TEMPLATE_DIRECTORY_URL . '/style.css', array(), '1.0' );
}, 99 );
Показать код

Он срабатывает после хука wp_enqueue_scripts.

Вариант 3

Подключаем стили в подвале сайта:

Скопировано
add_action( 'get_footer', function() {
wp_enqueue_style( 'main', TEMPLATE_DIRECTORY_URL . '/style.css', array(), '1.0' );
});
Показать код

К бэкэнду (админке сайта)

Все отличие от кода выше - это то, что надо просто использовать другой хук. Вместо хука wp_enqueue_scripts использовать хук admin_enqueue_scripts.

Скопировано
add_action( 'admin_enqueue_scripts', function() {
wp_enqueue_style( 'my_admin', TEMPLATE_DIRECTORY_URL . '/css/admin.css', array(), '1.0' );
wp_enqueue_script( 'my_admin', TEMPLATE_DIRECTORY_URL . '/js/admin.js', array(), '1.0', true );
});
Показать код

Здесь предполагается, что константа TEMPLATE_DIRECTORY_URL определена ранее, как первом примере.

Подключаем скрипт в админке только на нужной странице

Для определения нужной страницы админки можно использовать объект current_screen, который предоставит информацию о текущей странице.

Скопировано
add_action( 'admin_enqueue_scripts', function() {
global $current_screen;
if( ! $current_screen->post_type == 'product' || ! $current_screen->base == 'post' ) return;
wp_enqueue_script( 'my_admin', TEMPLATE_DIRECTORY_URL . '/js/admin.js', array(), '1.0', true );
});
Показать код

В этом примере скрипт подключится только если открывается страница редактирования или создания нового товара WooCommerce.

Если надо узнать ID редактируемой записи / страницы, то можно просто прочитать его из массива $_GET:

Скопировано
$post_id = $_GET['post'];
Показать код

Подключаем свои стили к редактору TinyMCE

Даже если мы подключили свои стили к админке, они не будут действовать на окно редактора TinyMCE, потому что оно выводится внутри тега <iframe>. Для подключения файла стилей внутри этого окна можно воспользоваться функцией add_editor_style():

Скопировано
add_action( 'current_screen', function() {
add_editor_style( 'css/editor-style.css' );
});
Показать код

В качестве параметра функция принимает путь к файлу стилей относительно используемого шаблона.