Каждый, хоть немного знакомый с WordPress, наверняка неоднократно слышал про столько популярный файл шаблона functions.php, благодаря которому можно значительно упростить настройку WordPress.
В задачи этого файла входит обработка php кодов. Используя functions.php можно расширить функциональные возможности WordPress, как те, что предлагаются разработчиками WordPress (регистрация и настройка виджетов и т.п.), так и добавить свои функции, хаки, хуки и т.д.
Практически любая тема (шаблон) WordPress использует файл functions.php, который располагается внутри папки с темой. Могущество этого файла практически безгранично, так как, он подгружается в процессе инициализации базовых функций WordPress. Поэтому через него можно редактировать практически любой элемент движка (задумка разработчиков). Более того, влияние этого файла распространяется не только на внешнюю часть (шаблон), но и на, так сказать, бэкэнд — админку WordPress.
Вставить какой-либо код в файл functions.php равносильно установке плагина и наоборот: можно взять код любого плагина и вставить в functions.php, эффект будет одинаковый.
Для примера, нижеследующий код, вставленный в файл темы functions.php заменит текст в подвале админки WordPress, на данные о количестве запросов к БД, времени генерации страницы и использовании памяти:
/* время генерации, запросы и потребление памяти
-------------------------------------- */
function usage(){
printf( ('SQL: %d за %s сек. '), get_num_queries(), timer_stop(0, 3) );
if ( function_exists('memory_get_usage') ) echo round( memory_get_usage()/1024/1024, 2 ) . ' mb ';
}
add_filter('admin_footer_text', 'usage');
Если использовать другой фильтр, к примеру, wp_footer (add_filter('wp_footer', 'usage');), то эти данные появятся в подвале самого сайта (шаблона).
functions.php: как все происходит
Хронология подгружаемых элементов движка выглядит примерно так: сначала подгружаются все базовые функции, фильтры (filters), действия (actions) и прочее, это происходит до того, как подключается шаблон и соответственно файл functions.php.
Поэтому через functions.php мы можем выключать/включать любые фильтры (filters), действия (actions), которые уже были определены WordPress'ом. Через него можно сделать практически все, что взбредет в голову. Нужно отметить, что functions.php обладает большим приоритетом чем плагины, потому что подгружается после них, а значит теоретически может управлять действиями плагинов.
Хронология загрузки файла WordPress functions.php
- index.php - главный файл в основной директории сайта
- wp-blog-header.php - грузит wp-load.php, всю базовую среду WordPress, это:
wp-load.php - загрузочный файл, подгружает последовательно: wp-config.php - конфигурационный файл, устанавливает настройки и грузит: wp-settings.php - используется для установки и изменения базовых переменных и подключения библиотек WordPress /wp-includes/wp-classes.php - классы WordPress /wp-includes/functions.php - функции WordPRess /wp-includes/plugins.php - плагины WordPRess - wp-includes/template-loader.php - грузит необходимую часть шаблона опираясь на url (перенаправляет на страницы меток, постов, фидов, и т.п.)
- wp-content/themes/theme/functions.php - и только тут подключается functions.php
Возможные ошибки в файле functions.php
Неоднократно встречал вопросы об ошибках, вроде: "после установки кода в файл functions.php сайт перестал работать". Да, что греха таить и сам когда-то был в такой ситуации. Через это прошли, наверное, все, кто более-менее плотно сталкивался с WordPress.
Для меня некоторые решения этой проблемы, долгое время, оставались загадкой - вроде ничего и не делал, удалил пустую строку и все заработало. Почему так происходит? Лично мне было очень интересно, но об этом чуть позже, сперва давайте рассмотрим возможные проблемы в functions.php, из-за которых может "ломаться" сайт/блог и пути их решения.
- Вставляете готовый код, сайт летит;
- Редактируете functions.php, сайт не открывается.
Решение очень простое, обычно все дело в открывающем и закрывающем тегах PHP <?php и ?>, если код который вы вставляете имеет в начале и в конце эти теги, то их нужно удалить. Так же, functions.php должен полностью состоять из php кода и никакого отдельного (за пределами <?php и ?>) HTML там быть не должно, HTML допускается только в структуре PHP (например, внутри php функции).
Итак, чтобы не допускать ошибок соблюдайте 2 правила:
1. Правильная вложенность
Пример, у нас была такая структура:
<?php ........здесь код......... ?>
Вы добавили php код так (вызовет ошибку или, что еще хуже, белый экран, если показ ошибок отключен):
<?php ........здесь код......... <?php ...... здесь добавленный код ........ ?> ........здесь код......... ?>
Правильно так:
<?php ........здесь код......... ........ здесь добавленный код ........ ........здесь код......... ?>
2. Никаких переносов строк, пробелов, текста до <?php и после ?>
Такой код вызовет ошибку:
<?php ...... здесь код ........ ?> <?php ...... здесь добавленный код ........ ?>
А этот нет:
<?php ...... здесь код ........ ?><?php ...... здесь добавленный код ........ ?>
Бывает что перенос строки ставят в самом конце functions.php, вот тогда это становится настоящей проблемой, потому что все казалось бы правильно, но на самом деле после ?> или до <?php присутствуют невидимый символ переноса строки \n. Выглядит такая ошибка, крайне безобидно, вот так:
<?php ... начало файла ... ...... здесь код ........ ... конец файла ... ?> здесь пустая строчка
3. Использование <?php и ?> внутри PHP функции
Если в functions.php присутствует функция, то внутри этой функции можно использовать теги <?php и ?>, например, для того, чтобы визуально выделить HTML код внутри функции:
<?php
... начало файла ...
function function_name(){
?>
<div>это html код</div>
<?php
}
... конец файла ...
?>
Дело в том, что в таком случае функция только лишь регистрируется и не выполняет никаких действий, т.е. все что внутри функции (между {}) не работает, пока эта функци не будет вызвана, а вызываются такие функции обычно из шаблона или через фильтры, т.е. после того, как отправлены HTML заголовки, поэтому в данном примере мы можем использовать ?> и <?php.
На практике, я вообще удаляю ?> в конце файла.
<?php или после ?>, потому что functions.php вызывается из шаблона и срабатывает до отправки заголовков функцией header (в заголовках передаются post данные или, что это страница ошибки 404). Так вот, по правилам PHP контент должен выводится на экран после того, как отправлены заголовки и никак не до этого, а все что за пределами <?php и ?> это как раз и есть контент, выводимый на экран, даже невидимый символ \n.В заключении добавлю, что желательно кодировать файл functions.php в кодировку UTF-8, так как именно она используется WordPress. Иначе если функции в файле будут выводить какую-либо кириллическую надпись на экран, эта надпись будет "корявая".
- Предыдущие по меткам
- Предыдущие записи
- 20+ полезных SQL запросов для WordPress ← 14.Сен.2011 // 19
- Меню на jQuery ← 28.Июл.2011 // 14
- 3 способа построения циклов в WordPress ← 20.Июн.2011 // 24
- Произвольное меню в WP 3.0+ (wp_nav_menu) ← 16.Окт.2010 // 31
- Перелинковка статей в WordPress (предыдущие записи из категории) ← 4 Май 2010 // 94
- Плагин опроса для WordPress - Democracy Poll ← 12 Июнь 2010 // 123
- Плагин для легкого управления сайтом на WordPress ← 23 Апрель 2010 // 37
Недавно пытался вписать код в этот файл и после этого у меня перестала открываться админка вордпресс и сам сайт!Пытался редактировать файл в текущей теме через хостинг,но после сохранения всё равно появляется мой прописанный код.Пробовал копировать файл, редактировать на компе, а потом обратно заливать,но всё равно прописанная мною строчка так и остаётся в это файле.Подскажите что делать пожалуйста.