Все про файл functions.php для вордпресс
Файл functions.php для WordPress неоднократно упоминался в данном блоге при решении тех или иных задач. Однако при этом я говорил о нем вскользь, подразумевая, что вы хорошо знакомы с его работой. Сегодня же наоборот, решил детально рассмотреть все нюансы, которые касаются файла функций functions.php: зачем он вообще нужен, как правильно и безошибочно с ним работать и т.п. Инструмент на самом деле весьма актуальный как при работе с админкой, так и в процессе редактирования темы. Пусть информация и немного теоретическая, почитать будет полезно (особенно новичкам).
Статья имеет 3 подраздела:
- Особенности и задачи functions.php;
- Редактирование файла функций;
- Типовые ошибки и примеры использования.
Что такое файл functions.php и зачем он нужен?
Как правило, в данном файле задаются дополнительные функции для шаблона, позволяющие менять внешний вид вашего сайта. Однако на самом деле его возможности значительно шире, поскольку functions.php в WordPress автоматически загружается при инициализации системы. То есть при вызове любой страницы, как фронтенда (сайта), так и бэкенда (админки), соответствующие функции из данного файла будут выполнены.
Следовательно, с помощью файла functions.php вы можете решить целый спектр абсолютно разных задач:
- Наиболее простой вариант — изменение внешнего вида темы. Вспоминаются сразу хаки для ссылки читать далее где можно влиять на вид линка «read more» и формат анонса.
- Определение своих функций дабы позже вызывать их в других файлах шаблона, что экономит время на внедрение изменений на сайте (да, и вообще является нормальным принципом в программировании). Например, функция отображение первой картинки поста, которую после определения можно использовать в файлах темы для категорий, тегов, архивов.
- Настройка админки под себя — скрытие определенных пунктов из меню, изменение разных параметров отображения для других пользователей и т.п. Сразу вспоминается статья про скрытие custom fields для не админов. Также с помощью functions.php в WordPress можно создать специальную страницу настроек темы.
- Переопределение каких-то параметров системы — изменение размеров миниатюр для шаблона, а также разного рода хаки и фильтры. Например, с помощью данного файла можно подправить отображение комментариев в wp_list_comments.
Вообще файл functions.php в WordPress по логике и скорости работы напоминает плагины. Хотя при этом у них есть принципиальные отличия. Модули используются, как правило, для решения каких-то конкретных задач и применяются к любой теме вашего сайта. Плюс для работы их нужно активировать. Что касается файла шаблона functions.php, то он может содержать много разных функций и выполняется только для той темы, в которой определен. То есть при смене шаблона, все ваши текущие наработки будут отключены, а система начнет считывать информацию из другого файла функций (об этом следует помнить).
Где находится functions.php и как его редактировать?
Файл функций расположен в корневой директории темы (вместе с index.php, single.php и другими). То есть вы заходите в папку wp-content/themes/название_темы/, и он будет там. Это не то же самое что одноименный файл ядра, который находится в системной директории /wp-includes/, нужный нам объект — в папке шаблона.
Сейчас в WordPress файл шаблона functions.php можно найти в 99% популярных тем, но раньше он был не везде. Если в вашей теме нет functions.php, то вы спокойно можете его создать.
Есть два способа редактирования файла функций:
- через WP админку;
- с помощью текстового редактора.
Первый вариант достаточно простой и наглядный. Вы заходите в меню «Внешний вид» — «Редактор» и выбираете соответствующий файл для правки.
После внесения изменений нажмите кнопку «Обновить файл» в самом низу. Преимущество данного метода в том, что вам не нужно использовать какие-то дополнительные программы для работы, все происходит внутри панели администрирования. Однако не всегда это возможно сделать.
Если файл functions.php закрыт для записи, то воспользоваться встроенным редактором WordPress у вас не получится. В таком случае запускаете FTP клиент, например, Mozilla и скачиваете файл функций на локальный компьютер.
Для работы с php файлом советую использовать специальные бесплатные редакторы — Notepad++ или Sublime Text. При этом важно чтобы кодировка редактируемого файла была UTF-8 без BOM. Вот как можно ее выбрать в Notepad++:
Если этого не сделать, то из-за BOM может возникнуть глюк в WordPress. Для Sublime Text 2 в меню «File» есть опция «Reopen With Encoding», позволяющая открыть файл в нужной кодировке. Однако при запуске functions.php автоматически срабатывает UTF-8 (т.к. файл сохранен именно в ней), поэтому ничего дополнительно делать не нужно.
После внесения изменений в файл, загружаете его обратно на FTP в ту же самую корневую папку активного шаблона. Второй метод, как видите, чуть более сложный, но иногда без него не обойтись. Если вдруг, редактируя functions.php в WordPress админке вы допустили ошибку, то весь сайт может перестать работать (увидите белый экран). В таком случае исправить код можно будет лишь, скачав файл функций на локальный компьютер и отредактировав его в текстовом редакторе.
Вставка сниппетов (примеры кода и типичные ошибки)
Дабы у вас не возникало ошибок при работе с functions.php в WordPress, давайте рассмотрим основные правила вставки кода и возможные ошибки. Первым делом обратите внимание на глобальную структуру любого PHP файла:
<?php // .... разный PHP код и функции .... ?> |
Здесь в начале идет специальный открывающий тег и в конце закрывающий. Важно чтобы не было никаких пробелов перед открывающимся и после закрывающегося тегов! Хотя в некоторых случаях вы можете встретить запись, когда последнего тега нет (для PHP это нормально). Давайте рассмотрим парочку примеров.
Ситуация 1
Допустим, вы нашли в интернете готовый сниппет для решения определенной задачи. И в описании сказано, что нужно вставить этот код в файл функций functions.php. В качестве примера выберем код удаления WP версии из wp_head:
<?php remove_action('wp_head','wp_generator'); ?> |
Так размещать неправильно:
<?php // .... разный PHP код и функции .... <?php remove_action('wp_head','wp_generator'); ?> ?> |
Возникает ошибка, поскольку система встречает тег открытия <?php нового PHP блока без закрытия предыдущего. Логичнее просто опустить <?php … ?> из найденного сниппета (так правильно):
<?php // .... разный PHP код и функции .... remove_action('wp_head','wp_generator'); ?> |
Следующий вариант также будет работать (между PHP блоками не должно быть пробелов):
<?php // .... разный PHP код и функции .... ?><?php remove_action('wp_head','wp_generator'); ?> |
Ситуация 2
Допустим вы хотите обновить jQuery в WordPress для чего нашли соответствующий код:
function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); |
Неправильный вариант использования:
<?php // .... разный PHP код и функции .... ?> function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); |
Нельзя размещать код после закрывающего PHP тега. Вам нужно поставить всю функцию внутрь конструкции:
<?php // .... разный PHP код и функции .... function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); ?> |
Кстати, если в functions.php закрывающего тега ?> нет (что допускается), то добавляете нужный сниппет просто в конец файла.
Ситуация 3
Нельзя вставлять сниппет внутрь другой функции. Допустим, в файле шаблона functions.php у вас имеется следующий код:
<?php // .... разный PHP код .... function some_name() { // Открывающий тег функции // разный код внутри функции } // Закрывающий тег ?> |
Неправильный вариант вставки:
<?php // .... разный PHP код .... function some_name() { // разный код внутри функции function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); } // Закрывающий тег ?> |
Добавить код можно только после закрывающего тега «}» первой функции. Вот так будет правильно:
<?php // .... разный PHP код .... function some_name() { // разный код внутри функции } // Закрывающий тег function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); ?> |
Ситуация 4
Рассмотрим для ознакомления еще один вариант, когда внутри функции вы можете встретить конструкцию <?php … ?>, которая не будет нарушать общий порядок работы самого файла.
<?php // .... разный PHP код .... function oxygen_metabox() { $oxygen_post_location = get_post_meta( $post->ID, '_oxygen_post_location', true ); ?> <p><?php echo __( 'Featured', 'oxygen' ) ?></label></p> <span class="description"><?php _e( 'Post location on the home page', 'oxygen' ); ?> <?php } // .... разный PHP код .... ?> |
Тут нужно учитывать 2 нюанса. Во-первых, не должно быть ошибок в последовательности открывающих и закрывающих PHP тегов — каждый открытый блок должен быть закрыт. Во-вторых, внутри функции {…} пробелы и переносы строк между тегами <?php и ?> не критичны. В любом случае нужно быть очень внимательным в процессе редактирования. Плюс редакторов Notepad++ и Sublime Text в том, что они подсвечивают теги/функции, и так проще ориентироваться в коде.
Итого. Надеюсь, данное руководство по WordPress файлу functions.php вам пригодится. Данный инструмент в веб-разработке под WP весьма и весьма полезен. Нужно только внимательно с ним работать, так как ошибки могут привести к проблемам в работе сайта. Дабы ничего не нарушить я предпочитаю редактировать файл через текстовые редакторы, предварительно сохранив оригинальный вариант на всякий случай.
Если у вас остались вопросы по работе с functions.php в вордпресс, пишите их в комментариях.
P.S. Постовой. Продвижение и оптимизация сайта — важные знания для вебмастеров.
А вы знаете самые популярные сайты? — ТОП10 сайтов в мире (по посещаемости).
комментариев 28 к статье “Все про файл functions.php для вордпресс”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Корисні поради по вибору плагінів для лендінгів на WordPress
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (247)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи
(5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress
(3,87 из 7, голосов - 55)
- Умный копирайт в footer.php для wordpress
(5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений
(5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress
(4,42 из 7, голосов - 31)
- Как откатить Вордпресс и модули на предыдущие версии (вручную и с плагинами)
(3,82 из 7, голосов - 34)
- Плагин TinyMCE Advanced – wordpress текстовый редактор
(6,35 из 7, голосов - 20)

- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Почему пользователи выбирают смартфоны Apple iPhone: основные преимущества и факторы популярности
- Выделенный сервер: полный гид по аренде, выбору и администрированию
- Оптимизируем VPS под WooCommerce
- Найбільш очікувані новинки MMORPG ігор в 2025 році
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
Да да… это самое классное что я нашёл в WP. Да и про изменение функций в новых версиях WP как то не особо важно, мы ведь в функциях прописываем доп. параметры либо создаём свою функцию и вызываем так что в большинстве своём, короче изучайте php xD
Крайне полезный файл, на своем блоге, добрая половина всех фич, прописана именно там. :) Например, убрать назойливые лапки в ковычках по умолчанию, можно именно с его помощью.
Одна из самых полезных фич WordPress — но при если не знать о ней, иногда запутывающая :) Буквально пару дней назад разбирался — почему не выводится строка «Ваш комментарий ожидает модерации». Причем, файл перевода есть, функция в ядре WordPress есть — а не выводится.
В итоге выяснилось, что функция была переопределена в functions.php.
Интересно, спасибо за статью надо будет попробовать поколупать сей файлик )))
Я использую на своем сайте дополнительные поля в записях. В них выводятся внешние ссылки. Как сделать эти ссылки внутренними? Пробовал плагин wp_noexternalinks но в дополнительных полях он не заменяет. Как быть? Может быть через файлик function.php это можно сделать. Подскажите пожалуйста.
danila, точного метода я не знаю, теоретически посмотреть как делаются ссылки внутренними и «провернуть» этот механизм для ссылок в дополнительных полях. Тут нужно разбираться с вопросом более детально, изучать, не уверен, что есть готовый плагин.
danila, WP-NoExternalLinks формирует ссылки по принципу _http://[доменн]/goto/[URL направления].
Соответственно, в выводе дополнительных полей, нужно прописать <a href="http://[доменн]/goto/ID, «link», $single = true); ?>»>[anchor]
Для примера, нам нужно сослаться на _https://wpinsideblog.com. В дополнительном поле link вставляем _https://wpinsideblog.com, а для вывода пишем:
<a href="http://www.poofsite.com.ua/goto/ID, «link», true); ?>»>ссылка
Люблю ковырять в этом файле настройки админки.
Так может к старости рнр и выучу :)
Над у себя заюзать =)
>>если, например, в wordpress 3.0 какая-то стандартная функция перестанет использоваться, то >>вам придется изменять код в functions.php
Думаю неверная фраза. Стандартная функция на то и стандартная, чтобы поддерживаться в следующих версиях. Что собственно принято у разработчиков. Речь можно вести о нестандартных функциях
Alex, к сожалению верная, местами в cms старые функции удаляют и заменяют новыми. Это, конечно, не частое явление, но бывает.
Я вот в своем блоге прописал код, который показывает нагрузку и количество запросов в самом низу страницы. Полезно иногда.
Я вставила код в этот файл, блок заблокировался. Я смогла его разблокировать, но запись Читать далее стала отображаться вопросительными знаками. Как мне ее восстановить?
function art_get_post_content() {
global $post;
ob_start();
if(is_single() || is_page()) {
echo art_get_the_content(__(‘Читать далее »’, THEME_NS));
wp_link_pages(array(‘before’ => ‘Pages: ‘, ‘after’ => », ‘next_or_number’ => ‘number’));
} else {
echo art_get_the_excerpt(__(‘Читать далее »’, THEME_NS),
get_permalink($post->ID),
art_option(‘metadata.excerpt_words’),
art_option(‘metadata.excerpt_use_tag_filter’) ? explode(‘,’,art_option(‘metadata.excerpt_allowed_tags’)) : null,
art_option(‘metadata.excerpt_min_remainder’),
art_option(‘metadata.excerpt_auto’));
}
return ob_get_clean();
Наталья, не совсем понятно, что значит «блок заблокировался». Иногда дизайнеры шифруют тему, когда при малейших изменениях в блоге отображается пустая страница — в этом случае нужно детально разбирать код. Что касается знаков вопроса, то, вероятно, при правке возникли проблемы с кодировкой (для редактирования кода лучше использовать Notepad++)
Tod, мне посоветовали запись Read more, код принял эту запись.
в wp 2 файла wp-includes\functions.php. первый в папке с темой. второй здесь wp-includes\functions.php.
насколько я понял все основные(стандартные ) функции в wp-includes\functions.php. пользователь если хочет создать свою, пишет ее в фаил, которые в папке с темой.
если происходит конфликт имён, то движок использует написанную пользователем функцию, то есть ту, которая в папке с темой. так ли это?
при обновлении движка функции в wp-includes\functions.php могут измениться. а в фаиле , которые в папке с темой — не могут измениться. так ли это?
cyklop, я как-то не думал, что может быть несколько файлов, но вообще речь в статье шла о functions.php, который идет с шаблоном. Функции в основном добавляются туда, поэтому при обновлении самой системы он останется таким, как был. Другое дело, что нужно быть внимательным при обновлении шаблона, т.к. он может перезаписать вашу functions.php.
Подскажите пожалуйста что сделать: при вставке любого кода в functions на сайте появляется только текст кода.
Изучай PHP — а где его взять для изучения и именно для вордпресс.. весь интернет перелопатил не найти, неужели умелые веб мастера не могут написать пару постов на эту тему
Дмитрий, похоже на то, что код находится где-то за пределами и просто выводится вместо интерпретации, можно попробовать скачать базовый работающий файл functions (для шаблонов они как правило все правильно функционируют) и постепенно туда добавить нужный код, проверяя все ли отображается нормально.
mr_exclusive, слабо вы «лопатили» интернет, да и можно запросто парировать мол «неужели так сложно взять и заняться изучением того, что вам так нужно», вместо поиска уже готовых решений, точнее даже искать сейчас мало кто хочет, все и сразу бывает очень редко, надо и самому проявить хоть чуть-чуть смекалки.
Tod, может у меня просто такой файл в теме. Хотел добавить соц. кнопки, по методу одного блоггера мне выдает текст на странице вместо кода, а у другого блогера нашел работающий вариант. Он хотя бы работает.
mr_exclusive, сам уже проверил на своем малом опыте, что в нете есть ВСЕ. В крайнем случае можешь ознакомиться с дисками Попова, у него есть отдельный диск по этой теме. А на сайте он выкладывает новые уроки, в принципе, он сильно разжевывает материал, что иногда даже перематываю.
Во время активации любого плагина выдается такое сообщение. помогите пожалуйста кто знает что это такое
Notice: register_sidebar_widget is deprecated since version 2.8! Use wp_register_sidebar_widget() instead. in /var/www/administ/data/www/votkak.co.cc/wp-includes/functions.php on line 3303
Notice: load_plugin_textdomain вызвал аргумент, который не поддерживается с версии 2.7 и не имеет доступных вариантов. in /var/www/administ/data/www/votkak.co.cc/wp-includes/functions.php on line 3389
Hovo, как по мне, похоже на то, что шаблон блог очень старый и вызывает функции, которые старше версии 2.8 уже не работают. Как исправить? — либо установить шаблон поновее либо найти где в шаблоне используется register_sidebar_widget и убрать, скорее всего в Functions.php и найдете эти функции.
Эх, у меня не выходит редактировать этот файл. Я даже если что-то, что в нем есть уберу и поставлю вновь — приходится делать откат. Не понимаю, все делаю как пишут, очень точно — не хочет он меняться, слетает и все тут.
Oksana, если файл слетает, то есть 2 возможных причины — в шаблоне в этом файле есть некая «защита» для темы блога дабы не удалять ссылки в футере и т.п. Вторая более частая проблема — лишние символы в файле — лучше всего использовать бесплатный Notepad++ для редактирования файла и сохранить в utf-8 без BOM его, плюс удалить лишние пробелы в начале файла в конце.
Друзья, добрый вечер. Не подскажете где WC можно убрать желтый бэкграунд у количества товаров?
sbkexpert.tmweb.ru/product-category/nash-katalog/
Или поменять на другой.
Заранее признателен.
Дмитрий, судя по коду вам нужно переопределить цвет фона или убрать сам фон в CSS стилях:
mark.class {
background: none !important;
}
А не подскажете в каком файле css нужно править?