Ноя
2
25

Все про файл functions.php для вордпресс

Файл функций Functions.phpФайл functions.php для WordPress неоднократно упоминался в данном блоге при решении тех или иных задач. Однако при этом я говорил о нем вскользь, подразумевая, что вы хорошо знакомы с его работой. Сегодня же наоборот, решил детально рассмотреть все нюансы, которые касаются файла функций functions.php: зачем он вообще нужен, как правильно и безошибочно с ним работать и т.п. Инструмент на самом деле весьма актуальный как при работе с админкой, так и в процессе редактирования темы. Пусть информация и немного теоретическая, почитать будет полезно (особенно новичкам).

Статья имеет 3 подраздела:

Что такое файл 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/, нужный нам объект — в папке шаблона.

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

Сейчас в WordPress файл шаблона functions.php можно найти в 99% популярных тем, но раньше он был не везде. Если в вашей теме нет functions.php, то вы спокойно можете его создать.

Есть два способа редактирования файла функций:

  • через WP админку;
  • с помощью текстового редактора.

Первый вариант достаточно простой и наглядный. Вы заходите в меню «Внешний вид» — «Редактор» и выбираете соответствующий файл для правки.

Редактирование functions.php

После внесения изменений нажмите кнопку «Обновить файл» в самом низу. Преимущество данного метода в том, что вам не нужно использовать какие-то дополнительные программы для работы, все происходит внутри панели администрирования. Однако не всегда это возможно сделать.

Если файл functions.php закрыт для записи, то воспользоваться встроенным редактором WordPress у вас не получится. В таком случае запускаете FTP клиент, например, Mozilla и скачиваете файл функций на локальный компьютер.

Скачать файл functions.php с FTP

Для работы с php файлом советую использовать специальные бесплатные редакторы — Notepad++ или Sublime Text. При этом важно чтобы кодировка редактируемого файла была UTF-8 без BOM. Вот как можно ее выбрать в Notepad++:

Кодировка 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 сайтов в мире (по посещаемости).

комментариев 25 к статье “Все про файл functions.php для вордпресс”

  • RodgerFox   11.04.2010

    Да да… это самое классное что я нашёл в WP. Да и про изменение функций в новых версиях WP как то не особо важно, мы ведь в функциях прописываем доп. параметры либо создаём свою функцию и вызываем так что в большинстве своём, короче изучайте php xD

  • Беркут   11.04.2010

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

  • Yaroslav.CH   12.04.2010

    Одна из самых полезных фич WordPress — но при если не знать о ней, иногда запутывающая :) Буквально пару дней назад разбирался — почему не выводится строка «Ваш комментарий ожидает модерации». Причем, файл перевода есть, функция в ядре WordPress есть — а не выводится.
    В итоге выяснилось, что функция была переопределена в functions.php.

  • 893erg   13.04.2010

    Интересно, спасибо за статью надо будет попробовать поколупать сей файлик )))

  • danila   14.04.2010

    Я использую на своем сайте дополнительные поля в записях. В них выводятся внешние ссылки. Как сделать эти ссылки внутренними? Пробовал плагин wp_noexternalinks но в дополнительных полях он не заменяет. Как быть? Может быть через файлик function.php это можно сделать. Подскажите пожалуйста.

  • Tod   14.04.2010

    danila, точного метода я не знаю, теоретически посмотреть как делаются ссылки внутренними и «провернуть» этот механизм для ссылок в дополнительных полях. Тут нужно разбираться с вопросом более детально, изучать, не уверен, что есть готовый плагин.

  • Yaroslav.CH   14.04.2010

    danila, WP-NoExternalLinks формирует ссылки по принципу _http://[доменн]/goto/[URL направления].

    Соответственно, в выводе дополнительных полей, нужно прописать <a href="http://[доменн]/goto/ID, «link», $single = true); ?>»>[anchor]

    Для примера, нам нужно сослаться на _http://wordpressinside.ru. В дополнительном поле link вставляем _http://wordpressinside.ru, а для вывода пишем:
    <a href="http://www.poofsite.com.ua/goto/ID, «link», true); ?>»>ссылка

  • k0tello   16.04.2010

    Люблю ковырять в этом файле настройки админки.
    Так может к старости рнр и выучу :)

  • A1an   17.04.2010

    Над у себя заюзать =)

  • Alex   20.04.2010

    >>если, например, в wordpress 3.0 какая-то стандартная функция перестанет использоваться, то >>вам придется изменять код в functions.php

    Думаю неверная фраза. Стандартная функция на то и стандартная, чтобы поддерживаться в следующих версиях. Что собственно принято у разработчиков. Речь можно вести о нестандартных функциях

  • Tod   20.04.2010

    Alex, к сожалению верная, местами в cms старые функции удаляют и заменяют новыми. Это, конечно, не частое явление, но бывает.

  • Евгений   12.08.2010

    Я вот в своем блоге прописал код, который показывает нагрузку и количество запросов в самом низу страницы. Полезно иногда.

  • Наталья   15.03.2011

    Я вставила код в этот файл, блок заблокировался. Я смогла его разблокировать, но запись Читать далее стала отображаться вопросительными знаками. Как мне ее восстановить?
    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();

  • Tod   15.03.2011

    Наталья, не совсем понятно, что значит «блок заблокировался». Иногда дизайнеры шифруют тему, когда при малейших изменениях в блоге отображается пустая страница — в этом случае нужно детально разбирать код. Что касается знаков вопроса, то, вероятно, при правке возникли проблемы с кодировкой (для редактирования кода лучше использовать Notepad++)

  • Наталья   15.03.2011

    Tod, мне посоветовали запись Read more, код принял эту запись.

  • cyklop   25.03.2011

    в wp 2 файла wp-includes\functions.php. первый в папке с темой. второй здесь wp-includes\functions.php.

    насколько я понял все основные(стандартные ) функции в wp-includes\functions.php. пользователь если хочет создать свою, пишет ее в фаил, которые в папке с темой.

    если происходит конфликт имён, то движок использует написанную пользователем функцию, то есть ту, которая в папке с темой. так ли это?

    при обновлении движка функции в wp-includes\functions.php могут измениться. а в фаиле , которые в папке с темой — не могут измениться. так ли это?

  • Tod   26.03.2011

    cyklop, я как-то не думал, что может быть несколько файлов, но вообще речь в статье шла о functions.php, который идет с шаблоном. Функции в основном добавляются туда, поэтому при обновлении самой системы он останется таким, как был. Другое дело, что нужно быть внимательным при обновлении шаблона, т.к. он может перезаписать вашу functions.php.

  • Дмитрий   27.03.2011

    Подскажите пожалуйста что сделать: при вставке любого кода в functions на сайте появляется только текст кода.

  • mr_exclusive   31.03.2011

    Изучай PHP — а где его взять для изучения и именно для вордпресс.. весь интернет перелопатил не найти, неужели умелые веб мастера не могут написать пару постов на эту тему

  • Tod   02.04.2011

    Дмитрий, похоже на то, что код находится где-то за пределами < ?php ,,, ?> и просто выводится вместо интерпретации, можно попробовать скачать базовый работающий файл functions (для шаблонов они как правило все правильно функционируют) и постепенно туда добавить нужный код, проверяя все ли отображается нормально.

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

  • Дмитрий   02.04.2011

    Tod, может у меня просто такой файл в теме. Хотел добавить соц. кнопки, по методу одного блоггера мне выдает текст на странице вместо кода, а у другого блогера нашел работающий вариант. Он хотя бы работает.
    mr_exclusive, сам уже проверил на своем малом опыте, что в нете есть ВСЕ. В крайнем случае можешь ознакомиться с дисками Попова, у него есть отдельный диск по этой теме. А на сайте он выкладывает новые уроки, в принципе, он сильно разжевывает материал, что иногда даже перематываю.

  • Hovo   03.07.2011

    Во время активации любого плагина выдается такое сообщение. помогите пожалуйста кто знает что это такое

    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

  • Tod   04.07.2011

    Hovo, как по мне, похоже на то, что шаблон блог очень старый и вызывает функции, которые старше версии 2.8 уже не работают. Как исправить? — либо установить шаблон поновее либо найти где в шаблоне используется register_sidebar_widget и убрать, скорее всего в Functions.php и найдете эти функции.

  • Oksana   16.11.2011

    Эх, у меня не выходит редактировать этот файл. Я даже если что-то, что в нем есть уберу и поставлю вновь — приходится делать откат. Не понимаю, все делаю как пишут, очень точно — не хочет он меняться, слетает и все тут.

  • Tod   17.11.2011

    Oksana, если файл слетает, то есть 2 возможных причины — в шаблоне в этом файле есть некая «защита» для темы блога дабы не удалять ссылки в футере и т.п. Вторая более частая проблема — лишние символы в файле — лучше всего использовать бесплатный Notepad++ для редактирования файла и сохранить в utf-8 без BOM его, плюс удалить лишние пробелы в начале файла в конце.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Последние посты
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости