Файл functions.php темы в WordPress
Каждый, кто знаком с WordPress, слышал о файле functions.php
темы. Однако не все понимают его назначение, видя в нем лишь файл, который хранит различные функции PHP. В интернете, как и на этом сайте, часто предлагают добавлять код PHP в этот файл. Но не каждый такой код будет работать. И дело не в его некоррект��ости, а в том, что он не вписывается в логику использования.
Также при редактировании functions.php
новички могут допускать ошибки, из-за которых сайт перестает работать.
В этой статье я постараюсь рассмотреть все эти моменты: когда необходимо использовать functions.php
, а когда лучше этого не делать, какие ошибки могут возникнуть при редактировании.
Содержание:
- Особенности functions.php
- functions.php против плагинов
- Для чего на самом деле нужен functions.php
- Как загружается functions.php
- Ошибки в functions.php при вставке кода
- Четыре вещи, которые следует помнить:
-
1 Правильная вложенность
-
2 Нет разрывов строк, пробелов и текста перед <?php и после ?>
-
3 Использование <?php и ?> внутри PHP-функции
-
4 Кодировка
-
Особенности functions.php
Файл functions.php
находится в папке вашей темы и загружается каждый раз, когда вы просматриваете фронтальную часть сайта, в админ-панели и даже в процессе AJAX-запросов. Существует множество задач, которые могут быть выполнены с помощью этого файла.
Например, следующий код, вставленный в файл functions.php
, добавляет поддержку миниатюр постов:
add_action( 'after_setup_theme', 'wp_kama_theme_setup' );
function wp_kama_theme_setup(){
// Поддержка миниатюр
add_theme_support( 'post-thumbnails' );
}
Другой пример: данный код изменяет текст в подвале админ-панели WordPress, выводя информацию о количестве запросов к базе данных, времени генерации страницы и использовании памяти:
add_filter( 'admin_footer_text', 'wp_usage' ); // в админ-панели
add_filter( 'wp_footer', 'wp_usage' ); // на сайте
function wp_usage(){
echo sprintf(
__( 'SQL: %d in %s sec. %s MB', 'km' ),
get_num_queries(),
timer_stop( 0, 3 ),
round( memory_get_peak_usage()/1024/1024, 2 )
);
}
functions.php против плагинов
"Плагины работают медленнее, чем код в файле functions.php", — утверждают необоснованно. Это неправда!
Скорость выполнения кода не зависит от того, подключен он через плагин или через файл functions.php
. Теоретически, вставка кода в functions.php
аналогична установке плагина, но это не одно и то же. Если вы смените тему, вы получите совершенно другой файл functions.php
, и все изменения будут потеряны, тогда как плагин останется до тех пор, пока вы не измените тему. С учетом этого, вы должны использовать файл functions.php
только для функционала, относящегося к теме.
Если же функционал нужен для всего сайта, стоит задуматься о создании плагина.
Второй приме��, указанный выше, не подходит для файла functions.php
, так как, изменяя тему, мы потеряем эту функциональность, а она нужна в админ-панели независимо от используемой темы.
Давайте уберем этот код из functions.php
и создадим плагин — это просто!
Чтобы создать плагин, вам нужно создать файл с любым именем и поместить в него следующий код. Затем добавьте его в директорию плагинов /wp-content/plugins/
и активируйте плагин в админ-панели:
<?php
/**
- Имя плагина: любое имя здесь
*/
// код плагина
add_filter( 'admin_footer_text', 'wp_usage' );
function wp_usage(){
echo sprintf(
__( 'SQL: %d in %s sec. %s MB', 'km' ),
get_num_queries(),
timer_stop( 0, 3 ),
round( memory_get_peak_usage()/1024/1024, 2 )
);
}
Если вы не хотите видеть еще один плагин в админ-панели, вы можете использовать плагины Must-Use.
Для чего на самом деле нужен functions.php
Как я уже отметил, файл functions.php
необходим для расширения функциональности темы и только для этого! В этом файле нужно добавлять код, который необходим именно для темы, но не для всего сайта.
Если вас просят добавить код в файл functions.php
, и он не относится непосредственно к теме, не ленитесь создать плагин. Это может помочь вам избежать неожиданных потерь функционала в будущем.
Как загружается functions.php
Файл functions.php
подключается во время инициализации текущей темы, после того как все функции WordPress и все активные плагины уже загружены. Вот краткое описание последовательности загрузки WordPress:
index.php
wp-blog-header.php
wp-load.php
wp-config.php
wp-settings.php
На этом этапе подключаются основные функции и фильтры.
После этого происходит следующее:
- Включаются must-use плагины:
do_action( 'muplugins_loaded' );
- Подключаются плагины:
do_action( 'plugins_loaded' );
- Устанавливаются глобальные переменные.
- Затем выполняется событие:
do_action( 'setup_theme' );
, после чего подгружается файлfunctions.php
. - В конце происходит инициализация окружения WordPress:
do_action( 'init' );
.
Полный процесс загрузки WordPress описан подробно, но это важно для понимания, когда именно загружается functions.php
.
Ошибки в functions.php при вставке кода
Меня часто спрашивают об ошибках, например: "После вставки кода в файл functions.php
сайт перестал работать — белый экран. Что делать?". Я сам сталкивался с подобным.
Самые частые проблемы связаны с открывающими и закрывающими тегами PHP <?php
и ?>
. Если вставленный код уже содержит эти теги в начале и в конце, их нужно удалить. Также в файле functions.php
не должно быть никакого текста (HTML-кода или других данных). Текст можно выводить только внутри функций, которые будут использоваться в шаблонах или подключаться к хукам.
Кроме того, перед <?php
или после ?>
не должно быть никаких символов, включая невидимые (например, переносы строк). Это потому, что functions.php
загружается до отправки HTTP-заголовков. По правилам PHP контент должен отображаться после отправки заголовков. Все, что находится вне <?php
и ?>
, считается контентом; даже невидимые символы могут вызвать ошибку белого экрана.
Четыре вещи, которые следует помнить
1 Правильная вложенность
Пример неправильной структуры:
<?php
........здесь код.........
<?php
...... здесь ваш вставленный код ........
?>
........здесь код.........
?>
Правильный вариант:
<?php
........здесь код.........
........ здесь ваш вставленный код ........
........здесь код.........
?>
2 Нет разрывов строк, пробелов, текста перед <?php и после ?>
Ошибка в следующем коде:
<?php
...... здесь код ........
?>
<?php
...... здесь ваш вставленный код ........
?>
Правильнее написать так:
<?php
...... здесь код ........
?><?php
...... здесь ваш вставленный код ........
?>
Или ещё лучше:
<?php
...... здесь код ..........
...... здесь ваш вставленный код ........
?>
Избегайте разрывов строк в самом конце файла functions.php
, так как это может вызвать ошибку: после ?>
или перед <?php
появляется невидимый символ переноса строки n
. Многие разработчики, чтобы избежать такой ситуации, вообще убирают закрывающий тег ?>
, что допустимо в PHP. Рекомендую всегда делать так:
<?php
... начало файла ...
...... здесь код ........
... конец файла ...
3 Использование <?php и ?> внутри функции PHP
Если в файле functions.php
есть функция, вы можете использовать теги <?php
и ?>
внутри этой функции, например, для визуального выделения HTML-кода:
<?php
... начало файла ...
function function_name(){
?>
}
... конец файла ...
?>
Дело в том, что в этом случае функция лишь определяется и не выполняет никаких действий. Все, что находится внутри функции (между фигурными скобками { }
), не работать, пока функция не будет вызвана. Такие функции обычно вызыв��ются из шаблона или через фильтры после отправки HTTP-заголовков. Поэтому в этом примере можно игнорировать разрывы строк и использовать ?>
и <?php
как угодно.
4 Кодировка
Еще один момент о файле functions.php
: устанавливайте кодировку на UTF-8 (UTF-8 без BOM). Иначе, если текст в файле будет на кириллице, он будет отображаться неверно и непонятно.
Теперь вы знаете, как работает файл functions.php
и какие ошибки могут произойти при его редактировании. Соблюдайте эти правила, и ваш сайт будет работать без сбоев!