Перейти к содержимому

Где находится functions php в wordpress

  • автор:

Файл functions.php в теме WordPress

В большинстве тем оформления WordPress можно обнаружить файл functions.php. Он находится в корневой папке темы. Файл подключается автоматически на каждой странице сайта, в панели администирования и даже на AJAX запросах.

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

Что стоит хранить в functions.php

  • Подключение файлов темы. В том числе файлов локализации.
  • Настройки темы и дополнительные вспомогательные функции темы.
  • Изменение параметров боковых панелей.
  • Функции для вывода миниатюр.
  • Изменение параметров отображения виджетов.
  • Определение мест под меню навигации.

В файл functions.php стоит записывать только тот код, те функции, которые непосредственно связаны с текущей темой. К примеру, не стоит писать в него код, который влияет на работу панели администрирования.

Что не надо хранить в functions.php

  • Функции для панели администрирования (добавление кнопки в панель, редактирование панели).
  • Отключение функций WordPress (к примеру, функций pingback/trackback).
  • Роли пользователей и привилегии.
  • Код виджетов.

В файл functions.php лучше писать только тот код, отключение которого при смене темы не принесёт к сбою в работе сайта. Если код не подходит для включения в файл functions.php, то стоит оформить его в виде плагина.

Белый экран после изменения functions.php

После редактирования файла functions.php может произойти неприятная ситуация — вместо сайта будет показан белый экран. Часто ошибка кроется в том, что программисты пытаются сделать вывод HTML кода непосредственно при подключении этого файла. Но так делать нельзя: необходимо помещать вывод внутрь функции и делать её вызов в других файлах темы сайта.

Файл functions.php может содержать функции, которые делают вывод (к примеру, кода HTML). Но он не может непосредственно выводить его при подключении файла. Потому что файл functions.php вызывается до установки заголовков страницы. Поэтому даже если в файле будет вывод символа пробела или переноса строки, то браузер отобразит пользователю пустую страницу.

Файл functions.php должен содержать PHP код от начала до конца.

Вывод может быть сделан в функции, но вызывать такую функцию надо в дргуом файле темы, а не в functions.php:

Если переживаете, что после закрывающего тега ?> останется пробел или перенос строки, то уберите весь тег. Компилятор закончит работу с окончанием файла, ошибки не будет:

Временные изменения в functions.php

Существуют некоторые приёмы ремонта сайтов на WordPress, при которых используется вызов функций в файле functions.php. К примеру, если перенести сайт с одного домена на другой и забыть изменить адрес сайта в настройках через панель администрирования, то будет срабатывать перенаправленние на старый домен при попытке загрузки любой страницы сайта. Чтобы решить эту проблему, можно вызвать функции изменения адреса сайта непосредственно в файле functions.php. А так как он загружается при открытии любой страницы сайта, то при первом же срабатывании значения настроек будут изменены.

Для этого откройте файл functions.php текущей темы сайта и добавьте две строчки с функцией «update_option» в самое начало:

Где вместо «https://www.mousedc.ru» поставьте новый адрес своего сайта. Затем загрузите страницу. Адрес пропишется в настройках: исчезнет перенаправление, появится возможность войти в панель администрирования.

После совершения операции удалите обе строки с «update_option». Иначе при каждой загрузке страницы будет выполняться два бесполезных запроса к базе данных, снижая быстродействие сайта.

SamPawno

Файл функций расположен в корневой директории темы (вместе с index.php, single.php и другими). То есть вы заходите в папку wp-content/themes/название_темы/ , и он будет там. Это не то же самое что одноименный файл ядра, который находится в системной директории /wp-includes/ , нужный нам объект — в папке шаблона .

Где находится файл functions.php WordPress.jpg

Где находится файл functions.php WordPress Где находится файл functions.php WordPress.jpg (90.19 КБ) 2538 просмотров

Functions.php в WordPress — правильное использование

Это главный файл в вашей теме WordPress. Располагается в /wp-content/themes//functions.php .
В нём определяются важные свойства темы, кастомизируются хуки, внешний вид и её функциональность, а также добавляются некоторые необходимые вам функции. Этот файл загружается каждый раз при открытии любой страницы WordPress, поэтому с его помощью можно изменить любой элемент сайта. В связи с этим, многие советы а-ля «как изменить что-то в WordPress без плагинов» часто касаются именно внесения изменений в functions.php, вместо того, чтобы создать под этот функционал отдельный плагин или воспользоваться готовым решением. Зачастую это приводит к информационной перегрузке этого файла, код становится тяжело разобрать, а внести исправления ещё сложнее. Но не это самое опасное. Самое опасное — это то, что при смене активной темы пропадёт часть или весь необходимый функционал сайта.

Чем отличается functions.php от плагина

Ничем. По своей сути, functions.php и есть эдакий глобальный неотключаемый плагин, который привязан к текущей теме. Как он подключается в WordPress, можно посмотреть в wp-settings.php. Как видно из исходного кода, его загрузка происходит после всех плагинов, однако, это не даёт никаких недостатков или преимуществ, разве что возможность переопределить что-то в подключенных плагинах. На скорость исполнения кода это также никак не повлияет. Влияет только содержание плагинов и functions.php. Поэтому, будьте внимательны при выборе активных плагинов для своей темы и откажитесь от ненужных, малополезных вам, тогда вы сможете облегчить ваш сайт и ускорить его работу.

Когда нужно использовать functions.php

Руководствуйтесь следующим правилом: если функционал напрямую связан с текущей темой, но не с работой сайта, записывайте его в functions.php.

К примеру, это может быть

  • Настройка миниатюр
  • Установка размеров сайдбаров
  • Настройка мест под виджеты
  • Объявление мест под навигационное меню
  • Настройки темы
  • Дополнительные функции вашей темы

Когда стоит избегать использования functions.php

Если функционал должен работать даже при смене активной темы, стоит позаботиться об его вынесении в отдельный плагин.
Сюда можно отнести:

  • Определение счётчиков посещаемости (Google Analytiсs, Yandex.Metrika, Liveinternet)
  • Настройка дополнительного функционала админки (например, дополнительные кнопки в текстовый редактор)
  • Конфигурирование исходного кода (убрать лишнее из кода: ссылки на RSS, wlwmanifest, xmlrpc, generator, т.д.)
  • Определение шорткодов
  • Регистрация произвольных типов записей и произвольных таксономий
  • Отключение функций pingback/trackback, ревизий, JSON REST API, Emoji

Списки неполные, вы можете определить их содержание сами под себя.

Куда внести данный код, если не в functions.php? Вы можете написать специальные плагины под них, однако, есть способ интереснее и проще.

mu-plugins как альтернатива functions.php

К нам в современные версии WordPress из WordPress MU(Multi-User) пришёл интересный функционал, называемый MU Plugins. Суть его заключалась в следующем. Администратору WordPress MU порой требовалось определить плагины для всей сети сайтов. Обычным функционалом этого было не добиться, поэтому ввели специальный раздел: /wp-content/mu-plugins/ , где они и определялись. Ещё что интересно, файлы плагинов из этой директории загружаются раньше всех остальных, что даёт возможность предопределить некоторые константы или настройки.
Позже WPMU упразднили, его код интегрировали с основным блоговым, и теперь любой WordPress может использовать функционал MU-plugins, который теперь расшифровывается как Must Use, то есть обязательный к использованию.

Как использовать mu-plugins

Вначале нужно создать специальный раздел /wp-content/mu-plugins/
В него мы помещаем нужные файлы-плагины. В отличие от обычных плагинов, здесь не нужно выдерживать специальный синтаксис, а функционал можно объявлять напрямую

Список MU-Plugins

Здесь для примера создан файл с кодом счётчиков посещаемости.
Внутри этот файл выглядит вот так

// . Вместо этой строки вставляем код счётчиков .

В админке он будет выглядеть как Необходимые

MU-Plugins в админке

В отличие от обычных плагинов, здесь подключаться будут только файлы, непосредственно находящиеся в разделе mu-plugins . Если вы хотите подключить файлы из подразделов, создайте загрузчик этих файлов

Создаём загрузчик файлов для mu-plugins

Допустим, у нас есть такая иерархия директорий

MU-Plugins Loader

Создадим wp-content/mu-plugins/load.php и запишем в него

Это всё, подключение готово.

В завершение

Помните, нельзя пихать всё подряд в functions.php, это захламляет код и создаёт опасную зависимость функционала сайта от его активной темы. Будьте разумны и выносите код сайта, который не должен зависеть от темы, в mu-plugins, он отлично подходит для этого.

Файл темы functions.php в WordPress

Каждый знакомый с WordPress слышал про файл темы (шаблона) functions.php . Однако не все хорошо понимают его назначение, видя в нем лишь файл в котором хранятся различные php функции. В сети, как и у меня на этом сайте, часто предлагается добавлять PHP код в этот файл. Однако не каждый код подойдет для этого файла. Не потому что он не будет работать, а потому что он не подходит по логике использования. Также при редактировании functions.php новички допускают ошибки из-за которых сайт перестает работать. В этой статье я постараюсь рассмотреть все эти моменты: когда нужно использовать functions.php и когда этого лучше не делать, какие ошибки при редактировании functions.php могут возникнуть.

Оглавление:

  • Возможности functions.php
  • functions.php против плагинов
  • Для чего на самом деле нужен functions.php
  • Как подгружается functions.php
  • functions.php дочерней темы
  • Ошибки в functions.php при вставке кода
  • Чтобы не было ошибок, учитывайте 4 момента:
  • #1 Правильная вложенность
  • #2 Никаких переносов строк, пробелов, текста до
  • #3 Использование внутри PHP функции
  • #4 Кодировка

Возможности 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 ) ); >

query

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 в частности, хорошо показан на этом рисунке:

Порядок загрузки ядра WordPress

functions.php дочерней темы

В отличие от других файлов дочерней темы, functions.php не заменяет родительский файл, а дополняет его: он автоматически загружается прямо перед файлом functions.php родительской темы.

Это значит, что для изменения родительской темы, в functions.php можно использовать хуки и можно «переопределять» функции, если они на это рассчитаны в functions.php родительской темы.

Ошибки в functions.php при вставке кода

Неоднократно встречал вопросы об ошибках, вроде: «После установки кода в файл functions.php сайт перестал работать — белый экран. Что делать?». Я и сам с подобным сталкивался когда-то.

Для меня некоторые решения этой проблемы, долгое время, оставались загадкой — вроде ничего не делал, и даже танца с бубном не было, но — раз и все заработало. Почему так происходит? Давайте рассмотрим возможные ситуации из-за которых может «ломаться» сайт и их объяснение:

  1. Вставляете готовый код — сайт перестает работать.
  2. Редактируете functions.php — сайт перестает работать.

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

Нельзя допускать никаких символов до , в том числе невидимые символы (перенос строки), потому что functions.php подключается до установки http заголовков (в таких заголовках передаются различные данные, например, что это html документ; что кодировка utf-8 другое). По правилам PHP, контент должен выводится на экран после того, как отправлены заголовки. А все что за пределами это и есть контент — текст выводимый на экран, даже невидимый символ \n. Поэтому такой текст вызывает ошибку.

Чтобы не было ошибок, учитывайте 4 момента:

#1 Правильная вложенность

Пример, у нас была такая структура:

Если Вы добавили php код так, то это вызовет ошибку или, что еще хуже, белый экран, когда показ ошибок отключен:

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

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