Как правильно подключить файл стилей в своей теме WordPress?

Подключение файлов CSS (для стилевого оформления элементов на странице) осуществляется при помощи специальной для этого функции wp_enqueue_style()

В принципе можно подключать стили (файлы CSS) по разному, хоть прямиком через HTML-элемент <link> 🙂 Но это будет не совсем правильно с точки зрения философии WordPress, его стандартов кодирования, так сказать.

Поэтому единственным правильным методом подключения файлов CSS в вашу тему (на страницы вашего сайта) будет являться метод через специальные функции.

Пример подключения основного файла стилей style.css и в примере после него — произвольного:

<?php

/**
 * Подключаем основной файл стилей темы (style.css)
 */
function poet_add_theme_styles() {
	wp_enqueue_style( 'style-main', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );

Кстати, ниже пример показывает, что мы можем управлять зависимостью одного стиля от другого, то есть очередностью их подключения.

<?php

/**
 * Подключаем основной файл стилей темы (style.css) и дочерний
 */
function poet_add_theme_styles() {
	wp_enqueue_style( 'style-main', get_stylesheet_uri() );

        wp_enqueue_style( 'child-style',
            get_stylesheet_directory_uri() . '/theme.css',
            array( 'style-main' ), // указываем зависимость
            wp_get_theme()->get('Version')
        );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );

Рассмотрим ещё одну функции, при помощи которой мы можем зарегистрировать файлы стилей. Важно понимать отличие этой функции от рассмотренной ранее. Дело в том что при помощи wp_enqueue_style() мы сразу подключаем указанный стиль, а при помощи wp_register_style() мы только регистрируем его в окружении WordPress, что бы он (WordPress) знал этот файл стилей по имени и в нужный момент или при нужном условии мы можем его подключить.

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

<?php

/**
 * Подключаем основной файл стилей темы (style.css) и дочерний
 */
function poet_add_theme_styles() {
	wp_enqueue_style( 'style-main', get_stylesheet_uri() );

        wp_register_style( 'child-style',
            get_stylesheet_directory_uri() . '/theme.css',
            array( 'style-main' ), // указываем зависимость
            wp_get_theme()->get('Version')
        );

        wp_enqueue_style( 'child-style' );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );

Теперь, после регистрации стиля по имени, мы можем его подключать простым вызовом функции wp_enqueue_style( ‘child-style’ ), в которую передаём имя этого файла CSS заданное при регистрации. На самом деле такой метод подключения даёт больше гибкости, особенно для опытных разработчиков.

ООП

Для любителей объектно-ориентированной парадигмы разработки вышеуказанный пример можно записать таким образом:

<?php

/**
 * Подключаем основной файл стилей темы (style.css) и дочерний
 */
class Poet_Add_Styles
{
    /**
    * Constructor.
    */    
    public function __construct(
		// Add stylesheet.
		add_action( 'wp_enqueue_scripts', array( $this, 'poet_add_theme_styles' ) );
	}

	/**
	 * Add and enqueues stylesheet.
	 */
	public function poet_add_theme_styles() {
	wp_enqueue_style( 'style-main', get_stylesheet_uri() );

        wp_register_style( 'child-style',
            get_stylesheet_directory_uri() . '/theme.css',
            array( 'style-main' ), // указываем зависимость
            wp_get_theme()->get('Version')
        );

        wp_enqueue_style( 'child-style' );
	}
}

new Poet_Add_Styles();

Класс с методом-конструктором вызовет этот метод на каждом вновь созданном объекте класса. Поэтому объявление метода-конструктора удобно для инициализации того, что может потребоваться объекту в начале работы.

Проблемы кеширования

Если посмотреть на исходный код страницы сайта на WordPress, то можно заметить вот такие добавки (называются гет-параметрами) к подключаемым файлам стилей

гет параметры после файлов

Если рассмотреть пример нашего кода, то он подключает файл theme.css и добавляет гет-параметром версию темы которая прописана в файле style.css. В итоге мы можем заметить версию 1.0

Если бы при регистрации или подключении файла CSS мы бы не указали параметр версии (функцией wp_get_theme()->get(‘Version’)), или установили бы значение false, то была бы тогда использована версия WordPress, как примере ниже, к нашему файлу добавилась версия WP

А если установить null, то никакая версия не будет установлена.

Чем это чревато? Представьте, что вы внесли правки в файл theme.css и изменили стиль оформления элемента, например, с зеленого фона на красный. То пользователь, который уже посещал ваш сайт снова будет видеть зелёный фон. Почему так?

Потому что при первом посещении сайта ресурс в виде файла theme.css в подавляющем большинстве случаев сохраняется в локальное хранилище браузера, что бы при повторном запросе не запрашивать и не загружать его заново с сервера а отдать из локального хранилища браузера.

Получается, что если пользователь не обновит страницу или не почистит кеш, он так и будет видеть зелёный фон у элемента. Вероятнее всего новый стиль загрузится и отобразится у него со сменой версии WordPress или сменой версии темы оформления.

Поэтому, если вы часто вносите правки в файлы стилей, то стоит позаботится о решении этой неприятности.

Как решить эту проблему?

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

В этом поможет функция filemtime — Получает время последнего изменения файла. Тогда наш код немного преобразится:

<?php

/**
 * Подключаем основной файл стилей темы (style.css) и дочерний
 */
function poet_add_theme_styles() {
	wp_enqueue_style( 'style-main', get_stylesheet_uri() );

        wp_register_style( 'child-style',
            get_stylesheet_directory_uri() . '/theme.css',
            array( 'style-main' ), // указываем зависимость
            filemtime( get_stylesheet_directory() .'/theme.css' )
        );

        wp_enqueue_style( 'child-style' );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );

Ну вот и всё!

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

Автор

Evgeni

Веб-разработчик, фрилансер и фанат WordPress с 2012 года. На этом сайте делюсь заметками для начинающих по разработке на WordPress. Надеюсь увидеть вас в числе своих подписчиков.

Добавить комментарий

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