- Файл темы functions.php в WordPress
- Возможности functions.php
- functions.php против плагинов
- Для чего на самом деле нужен functions.php
- Как подгружается functions.php
- functions.php дочерней темы
- Ошибки в functions.php при вставке кода
- Чтобы не было ошибок, учитывайте 4 момента:
- #1 Правильная вложенность
- Файл functions.php – зачем он нужен, как его редактировать в WordPress
- Что за файл functions.php, каковы его задачи
- Где находится файл functions.php
- Редактирование файла functions.php
Файл темы functions.php в WordPress
Каждый знакомый с WordPress слышал про файл темы (шаблона) functions.php . Однако не все хорошо понимают его назначение, видя в нем лишь файл в котором хранятся различные php функции. В сети, как и у меня на этом сайте, часто предлагается добавлять PHP код в этот файл. Однако не каждый код подойдет для этого файла. Не потому что он не будет работать, а потому что он не подходит по логике использования. Также при редактировании functions.php новички допускают ошибки из-за которых сайт перестает работать. В этой статье я постараюсь рассмотреть все эти моменты: когда нужно использовать functions.php и когда этого лучше не делать, какие ошибки при редактировании functions.php могут возникнуть.
Возможности functions.php
functions.php располагается в папке темы и загружается каждый раз, во время просмотра внешней части сайта, в админ-панели и даже во время AJAX запросов. Нет случая, когда functions.php не будет подключен и это открывает широкие возможности перед разработчиками.
Для примера, следующий код, вставленный в файл темы 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 за %s сек. %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/ и активировать плагин в админ-панели:
Если нет желания видеть еще один плагин в админ-панели, то можно использовать 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 // Подключаются самые базовые функции (подключение к БД $wpdb и система фильтров) // Подключаются базовые фильтры // SHORTINIT: Остановка загрузки, где есть только самое базовое: if ( SHORTINIT ) return false; // подключается вся среда WordPress: базовые функции, фильтры // подключаются must-use плагины, затем срабатывает событие: do_action( 'muplugins_loaded' ); // подключаются активированные плагины, затем срабатывает событие: do_action( 'plugins_loaded' ); // устанавливаются глобальные переменные: wp_the_query, wp_query, wp_rewrite, wp, wp_widget_factory, wp_roles . do_action( 'setup_theme' ); // устанавливается текущая тема Подключение functions.php дочерней темы Подключение functions.php родительской темы do_action( 'after_setup_theme' ); // событие, когда среда WP, все плагины и тема полностью подключены, но на экран еще ничего не выведено: do_action( 'init' ); // проверка статуса сайта для мультисайтовой сборки // тоже самое что init только после проверки статуса (до этой строки работа PHP может не дойти) do_action( 'wp_loaded' ); wp() // заполняет основной запрос WP и все глобальные переменные связанные с ним wp-includes/template-loader.php // подключает нужный файл шаблона
Процесс загрузки WordPress, и functions.php в частности, хорошо показан на этом рисунке:
functions.php дочерней темы
В отличие от других файлов дочерней темы, functions.php не заменяет родительский файл, а дополняет его: он автоматически загружается прямо перед файлом functions.php родительской темы.
Это значит, что для изменения родительской темы, в functions.php можно использовать хуки и можно «переопределять» функции, если они на это рассчитаны в functions.php родительской темы.
Ошибки в functions.php при вставке кода
Неоднократно встречал вопросы об ошибках, вроде: «После установки кода в файл functions.php сайт перестал работать — белый экран. Что делать?». Я и сам с подобным сталкивался когда-то.
Для меня некоторые решения этой проблемы, долгое время, оставались загадкой — вроде ничего не делал, и даже танца с бубном не было, но — раз и все заработало. Почему так происходит? Давайте рассмотрим возможные ситуации из-за которых может «ломаться» сайт и их объяснение:
- Вставляете готовый код — сайт перестает работать.
- Редактируете functions.php — сайт перестает работать.
Чаще всего, дело в открывающем и закрывающем тегах PHP . Обычно, если вставляемый код имеет в начале и в конце эти теги, то их нужно удалить. Также, файл functions.php не должен выводить на экран никакой текст (HTML код или другой контент). Вывод текста допускается только внутри функции, которые в дальнейшем будут использоваться в шаблоне или которые прикрепляются к хукам (подробнее см. ниже).
Нельзя допускать никаких символов до , в том числе невидимые символы (перенос строки), потому что functions.php подключается до установки http заголовков (в таких заголовках передаются различные данные, например, что это html документ; что кодировка utf-8 другое). По правилам PHP, контент должен выводится на экран после того, как отправлены заголовки. А все что за пределами это и есть контент — текст выводимый на экран, даже невидимый символ \n. Поэтому такой текст вызывает ошибку.
Чтобы не было ошибок, учитывайте 4 момента:
#1 Правильная вложенность
Пример, у нас была такая структура:
Если Вы добавили php код так, то это вызовет ошибку или, что еще хуже, белый экран, когда показ ошибок отключен:
Файл functions.php – зачем он нужен, как его редактировать в WordPress
В WordPress можно реализовать множество возможностей. Причём для этого можно использовать как плагины, так и непосредственно вписывать необходимый код в файлы, что относятся к WordPress. И одним из таких популярных файлов является functions.php.
Что за файл functions.php, каковы его задачи
Данный файл в обязательном порядке располагается в директории с используемой темой (дизайна) сайта. В большинстве своём в этом файле прописываются те или иные функции, отвечающие за дизайн и функционал используемой темы сайта (дизайна). Однако это далеко не весь перечень возможностей, что позволяет реализовать данный файл. Этот файл «подхватывается» при непосредственной инициализации движка WordPress, что означает, что имеющийся в файле код исполняется при вызове совершенно любой страницы сайта, включая даже консоль WordPress.
Давайте посмотрим, какие задачи можно решать с использованием файла functions.php:
- Внешний вид, функционал темы – как уже говорилось выше, изначально в этом файле размещается код, в первую очередь отвечает за дизайн и функционал темы. Он может быть самым различным, на усмотрение автора, что создал тему.
- Функционал сайта – в этом файле может размещаться код, что отвечает в целом за функционал сайта, логику его работы. Вы можете добавить самый различный код, затрагивающий все возможные области функционирования сайта.
- Консоль WordPress – да, размещаемый в файле код подхватывается и при использовании админ-панели WordPress. Можно что-либо изменить там с помощью всё того же functions.php.
По принципу работы файл functions.php практически идентичен добавленному на сайт плагину. Однако есть и свои особенности:
- Файл functions.php располагается в директории с файлами темы (дизайна сайта). Если, к примеру, вы переключите тему на другую, то будет обрабатываться уже имеющийся там файл functions.php.
- Плагин можно в любой момент включить или отключить, а код в functions.php обрабатывается всегда. И если вы туда что-то вписали для расширения функционала, то для его отключения впоследствии следует будет удалить вписанный ранее вами код.
- Файл расположен в папке с темой. И если выйдет новая версия темы и вами она будет установлена, то данный файл будет перезаписан, а все сделанные вами в нём изменения будут затёрты.
Где находится файл functions.php
Необходимый файл располагается в директории, где расположены другие основные файлы темы (header.php, footer.php, single.php и так далее). А сама директория располагается по пути wp-content/themes//
Стоит сказать, что одноимённый файл ещё имеется в папке /wp-includes/, где располагаются файлы самого движка WordPress. И этот файл не подлежит редактированию.
Редактирование файла functions.php
Упоминание файла functions.php часто встречается в различных руководствах для WordPress, позволяющих расширить тот или иной функционал сайта.
Отредактировать файл можно двумя способами, давайте их рассмотрим:
- Первый вариант заключается в использовании возможностей по редактированию файлов, что предлагает сам WordPress. Необходимо в консоли WordPress зайти в меню Внешний вид и далее нажать по пункту Редактор тем и выбрать необходимый файл для правки. Вписывать код необходимо после блока описания темы. На изображении ниже вы можете видеть пример данного блока. В некоторых темах у файла functions.php данного блока нет. В этом случае вписываете желаемый код сразу после . На изображении ниже наглядно это продемонстрировано.
- Второй вариант, позволяющий редактировать файлы в WordPress, это использование FTP клиента для доступа к файлам на хостинге\ сервере и популярного бесплатного текстового редактора под названием Notepad++ для непосредственного редактирования файла. Этот способ весьма удобен и предпочтителен, ведь если внести какую-либо некорректную запись в файл functions.php, то сайт может перестать функционировать, включая админ-панель WordPress. Но это никак не повлияет на работоспособность FTP. Вы всегда сможете моментально отменить все внесённые в файл изменения. И так, используя FTP клиент (их существует множество, как платных, так и полностью бесплатных), настройте в нём доступ к файлам своего сайта (инструкцию по настройке можно получить у провайдера хостинга). Открыв в нём список вашего сайта, перейдите в папку wp-content/themes// и далее откройте на редактирование файл. Впишите или отредактируйте необходимое и сохраните результат. Если что-то пойдёт не так, то вы сможете моментально отменить все внесённые изменения, для этого в верхнем меню имеется пункт Правка ->Отмена или стрелочки на панели инструментов.
Вот мы и рассмотрели детально, что за файл, который весьма часто упоминается в статьях и материалах, где приводятся различные твики и функциональные решения для сайта, работающего на движке WordPress.