Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

WordPress functions php: Файл functions.php в WordPress — назначение, правка, примеры

Содержание

Вся правда о functions.php — WP Magazine

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

Что такое functions.php

Если вы хоть раз открывали исходный код любой темы для WordPress, вероятно вы сталкивались с файлом под названием functions.php.

Файл functions.php

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

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

К сожалению многие уроки WordPress в сети Интернет (серии «без плагинов») предлагают вставлять блоки кода именно в файл functions.php активной темы, потому что редактировать этот файл легче, чем создавать новый плагин, особенно через редактор файлов в панели администрирования WordPress.

Редактор файлов темы в WordPress

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

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

Если коротко — то ничем.

Если взглянуть на порядок загрузки ядра WordPress в файле wp-settings.php, то мы увидим что файл functions.php активной темы загружается немного позднее всех активных плагинов, но данный порядок не дает каких-либо преимуществ или недостатков. А содержание файла functions.php и файлов плагинов подключаются и выполняются идентичным образом.

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

Мифы о производительности functions.php

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

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

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

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

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

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

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

  • Код счетчиков Google Analytics или Яндекс.Метрики
  • Произвольные типы записей или таксономии в WordPress
  • Дополнительные скрипты и стили, не связанные с темой
  • Дополнительные роли и привилегии
  • Код для вставки рекламных баннеров в содержимое сайта
  • Отключение RSS лент
  • Скрытие версии ядра WordPress (этого делать вообще не стоит)
  • Скрытие верхнего меню администрирования WordPress
  • Отключение ревизий записей
  • Отключение функций pingback/trackback
  • Любые шорткоды

При столкновении с очередным отрывком кода, попробуйте задать себе простой вопрос — что произойдет при смене активной темы в WordPress? Если ваш ответ «перестанут работать счетчики посещаемости», «пропадут все произвольные типы записей», и т.д. то данный отрывок лучше хранить в виде плагина.

Как создать свой плагин

Для многих начинающих WordPress разработчиков тема создания собственных плагинов является сложной. Действительно для написания хорошего комплексного плагина для WordPress потребуется немало усилий и знаний в программировании, но, если вам нужно лишь вставить небольшой отрывок кода, то для этого подойдет и простой короткий плагин:

<?php
/**
 * Plugin Name: Моя альтернатива файлу functions.php
 */

// Ваш код здесь

Сохраните этот файл под названием my-functions.php и разместите его в директории wp-content/plugins. После этого перейдите в раздел Плагины в панели администрирования WordPress и активируйте его.

Собственный плагин для WordPress

Также советуем не хранить все сниппеты в одном единственном плагине, а разбивать их на более мелкие отдельные плагины, чтобы с ними было удобнее работать.

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

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

В WordPress есть специальный вид плагинов, которые называются «must use» или mu-plugins. Эти плагины активны по умолчанию, и деактивировать их через панель администрирования возможности нет. В mu-plugins также отсутствует требование к заголовку PHP файла (Plugin Name и т.д.), поэтому код можно писать сразу после открытия тега <?php.

Подобные плагины необходимо размещать в директории wp-content/mu-plugins. Если такая директория у вас отсутствует, вы можете ее создать.

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

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

Заражение файла functions.php темы оформления в WordPress | Вопросы-ответы на Wiki

Внимание! Нижеприведенная информация является исключительно рекомендациями, которые могут помочь удалить вредоносный код из скриптов сайта. Администрация хостинга не несёт ответственности за ущерб, нанесённый сайту при их выполнении специалистом с ненадлежащим уровнем знаний.

Удаление вредоносного кода только из файла functions.php, как показывает практика, не решает вопроса. Поэтому эта инструкция может быть полезной при устранении проблемы.

  1. Убедитесь, что файла wp-includes/class.wp.php нет в принципе. Если есть — удалите его. Обратите особое внимание на имя файла — в этом каталоге есть много файлов с похожим названием, но вместо точки — дефис, и т. д. Речь идёт исключительно о wp-includes/class.wp.php.

  2. Аналогично предыдущему пункту удалите файл wp-includes/wp-vcd.php, если он существует.
    Примечание к первым двум пунктам: проверив официальный репозиторий WordPress, можно убедиться, что в стандартной комплектации обоих файлов нет и они являются сторонними.
  3. Проверьте содержимое wp-includes/post.php. А именно — если в первой строке присутствует нечто вида:
    Для убедительности пример, как выглядит файл post.php в стандартном виде WordPress — https://github.com/WordPress/WordPress/blob/master/wp-includes/post.php (обратите внимание на строку 1).
  4. Пункты 1-3 должны помочь устранить причину, по которой вредоносный код может появляться в файлах functions.php после удаления. Осталось проверить functions.php каждой установленной темы. Самый верный способ — попробовать переустановить тему, если есть возможность. В противном случае — приведём пример заражённого файла: https://gist.github.com/alexandrpaliy/b3bb8a19433478fe32414895ad641709 — внешний вид строки 3 из данного примера является типичным признаком, что functions.php заражён. В таком случае — удалить нужно весь блок <?php … ?>, в котором встречается строка 3:
    Выражаясь чуть проще, удалить нужно всё с начала файла и до первого сочетания символов ?>. В данном примере — это строка 100. В итоге очищенный файл будет иметь такой вид: https://gist.github.com/alexandrpaliy/95663f8dc1186cf6e4a6b725c397781b
  5. Есть сведения, что, в некоторых случаях вирус помимо модификации файлов также пытается создать нового пользователя админ-панели сайта, предоставляя ему права администратора. Потому, имеет смысл проверить в базе данных таблицу users (чаще всего — wp_users), и если в ней присутствуют незнакомые вам пользователи — рекомендуется удалить их, удалив соответствующие строки таблицы.

8 хуков для functions.php, необходимых каждому сайту на WP

Итак, вы только что установили свой сайт на WordPress (условимся, что наш WordPress на русском языке, если нет — то будет одним хуком меньше). Также будем считать, что вы уже определились с темой, которую будете использовать, либо же вы решили создать свою собственную тему — одно из двух.

В этом посту я перечислю не просто хуки, «которые прикольные», а хуки, которые необходимы к установке на каждый WordPress-сайт. Надеюсь, благодаря моим постам, ваши сайты (и все сайты рунета) станут чуточку лучше.

1. Склонение дат на сайте

Если вы хотите, чтобы вместо «Опубликовано 31 Декабрь 2013» у вас отображалось «Опубликовано 31 декабря 2013», тогда этот хук обязателен к установке:

function true_russian_date_forms($the_date = '') {
	if ( substr_count($the_date , '---') > 0 ) {
		return str_replace('---', '', $the_date);
	}
	// массив замен для русской локализации движка и для английской
	$replacements = array(
		"Январь" => "января", // "Jan" => "января"
		"Февраль" => "февраля", // "Feb" => "февраля"
		"Март" => "марта", // "Mar" => "марта"
		"Апрель" => "апреля", // "Apr" => "апреля"
		"Май" => "мая", // "May" => "мая"
		"Июнь" => "июня", // "Jun" => "июня"
		"Июль" => "июля", // "Jul" => "июля"
		"Август" => "августа", // "Aug" => "августа"
		"Сентябрь" => "сентября", // "Sep" => "сентября"
		"Октябрь" => "октября", // "Oct" => "октября"
		"Ноябрь" => "ноября", // "Nov" => "ноября"
		"Декабрь" => "декабря" // "Dec" => "декабря"
	);
	return strtr($the_date, $replacements);
}
 
// если хотите, вы можете приминить только некоторые из фильтров
add_filter('the_time', 'true_russian_date_forms');
add_filter('get_the_time', 'true_russian_date_forms');
add_filter('the_date', 'true_russian_date_forms');
add_filter('get_the_date', 'true_russian_date_forms');
add_filter('the_modified_time', 'true_russian_date_forms');
add_filter('get_the_modified_date', 'true_russian_date_forms');
add_filter('get_post_time', 'true_russian_date_forms');
add_filter('get_comment_date', 'true_russian_date_forms');

Функция склонения дат будет работать как для постов и страниц, так и для комментариев WordPress.

2. Сообщения об ошибках при попытке авторизации пользователя на сайте

Если при авторизации допустить ошибку при вводе логина или пароля, WordPress указывает, что именно было введено неправильно. Например «ОШИБКА: Неверное имя пользователя.» или «ОШИБКА: Введённый вами пароль пользователя admin неверен.»

Для того, чтобы WordPress не сообщал лишней информации, мы на оба случая сделаем общее сообщение об ошибке, вставив следующий код в functions.php.

function true_change_default_login_errors(){
	return '<strong>ОШИБКА</strong>: Вы ошиблись при вводе логина или пароля.';
}
 
add_filter( 'login_errors', 'true_change_default_login_errors' );

Подробнее о замене сообщений об ошибках вы можете почитать здесь.

3. Защита от вредоносных URL-запросов

if (strpos($_SERVER['REQUEST_URI'], "eval(") ||	strpos($_SERVER['REQUEST_URI'], "CONCAT") || strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||	strpos($_SERVER['REQUEST_URI'], "base64")) {
	@header("HTTP/1.1 400 Bad Request");
	@header("Status: 400 Bad Request");
	@header("Connection: Close");
	@exit;
}

4. Защита от автоматического спама

Отлично борется с автоматическим спамом, результат — менее 5 спамных комментариев в месяц. Хочу обратить внимание, что прежде, чем вставлять этот хук в ваш functions.php, вы должны добавить скрытое поле в форму комментирования на сайте, иначе вообще никакие комментарии проходить не будут. Читайте подробнее здесь.

function true_stop_spam( $commentdata ) {
	$fake = trim($_POST['comment']); // обычное поле комментирования мы скроем через CSS
	if(!empty($fake)) // заполнение его роботами будет приводить к ошибке, комментарий отправляться не будет
		wp_die('Спамный коммент!'); 
	$_POST['comment'] = trim($_POST['true_comment']); // затем мы присвоим ему значение поля комментария, которое для людей
	return $commentdata;
}
 
add_filter('pre_comment_on_post', 'true_stop_spam');

5. Скрываем имена пользователей из HTML-кода комментариев

Этот хук позволит удалить все имена пользователей из CSS-классов комментариев. Если же у вас стили комментария администратора отличаются от стилей остальных комментов, то благодаря этому хуку вы также можете добавить какой-нибудь особенный класс именно для администратора сайта. Читайте подробнее здесь.

function true_remove_css_class( $classes ) {
	foreach( $classes as $key => $class ) {
		if(strstr($class, "comment-author-")) {
			unset( $classes[$key] );
		}
	}
	return $classes;
}
add_filter('comment_class', 'true_remove_css_class');

6. Запрет пингбэков и трэкбэков на самого себя

После добавления этого кода в functions.php, трэкбэки больше не будут появляться, когда вы будете ссылаться на другие посты вашего сайта.

function true_disable_self_ping( &$links ) {
	foreach ( $links as $l => $link )
		if ( 0 === strpos( $link, get_option( 'home' ) ) )
 			unset($links[$l]);
}
 
add_action( 'pre_ping', 'true_disable_self_ping' );

7. Скрываем версию WordPress

По умолчанию можно узнать версию установленного на сайте WordPress, заглянув в исходный HTML-код или в код RSS. Для того, чтобы не предоставлять злоумышленникам лишней информации, вставляем это в funcions.php:

function true_remove_wp_version_wp_head_feed() {
	return '';
}
 
add_filter('the_generator', 'true_remove_wp_version_wp_head_feed');

Подробнее здесь.

8. Ставим ссылку на себя в футере в админке

Если вы сделали кому-то сайт, то в футер можно добавить ненавязчивое сообщение, что разработкой занимались вы.

function true_change_admin_footer () {
	$footer_text = array(
		'Спасибо вам за творчество с <a href="http://wordpress.org">WordPress</a>',
		'Разработал <a href="https://misha.agency" target="_blank">Миша Рудрастых</a>'
	);
	return implode( ' • ', $footer_text);
}
 
add_filter('admin_footer_text', 'true_change_admin_footer');

В итоге получим:

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Страница не найдена — ЛАВСИТ

5. Гарантия на Товар

5.1. Гарантийный срок на каркас мебели и элементы внешней отделки (швы, молдинг) составляет 24 месяца.
5.2. Гарантия не распространяется на ткань.
5.3. В соответствии с ГОСТ Р 16371-93 гарантийные обязательства продавца не распространяются на Товары, сборка которых производилась силами Покупателя.
5.4. Гарантия не распространяется на повреждения, полученные в ходе самостоятельной доставки и подъема Товара силами Покупателя.
5.5. Гарантийное обслуживание не производится в случае:
— истечения гарантийного срока;
— невыполнения условий эксплуатации;
— наличия на изделии механических повреждений и дефектов, выявленных Покупателем после осуществления приемки-передачи;
— наличия на изделии механических повреждений и дефектов, следов постороннего вмешательства в изделие, возникающих в результате неправильной эксплуатации;
— нанесения ущерба изделию в результате умышленных или ошибочных действий Покупателя;
— нанесения ущерба изделию, вызванного попаданием внутрь изделия посторонних предметов, жидкостей, животных, насекомых и т.д.;
— нанесения изделию ущерба в результате внесения изменений в его конструкцию;
— нарушения иных условий, указанных в Правилах и условиях эффективного безопасного использования мебели (ГОСТ Р 16371-93, ГОСТ Р 19917-93).
5.6. При доставке Товара от Продавца к Покупателю допускается наличие незначительных дефектов, не влияющих на функциональность:
— проходящий и несильный химический запах;
— незначительные сколы либо царапины на деревянных опорах;
— небольшой разнотон выкраса;
— незначительный разнотон ткани в сравнении с образцами;
— замин или залом ворса ткани.
5.7. Если в результате экспертизы Товара установлено, что его недостатки возникли вследствие обстоятельств, за которые Продавец не отвечает, Покупатель обязан возместить Продавцу расходы на проведение экспертизы и расходы на логистику.
5.8. Срок устранения недостатков Товара по гарантии — до 40 (сорока) рабочих дней, не считая дня обращения Покупателя к Продавцу, в случае если все необходимые комплектующие есть в наличии у поставщика Продавца. В противном случае Продавец должен предоставить электронную копию документа от своего поставщика, подтверждающего отсутствие необходимых комплектующих, и гарантийный срок может быть продлен на время их поставки в город Продавца.
5.9. В зависимости от периода закупки ткани, ее оттенок может меняться, в связи с чем мебель с одним и тем же артикулом ткани, Заказанная не одновременно, может незначительно отличаться по цвету друг от друга.

Файл functions.php – зачем он нужен, как его редактировать в WordPress

    Код Подключаемый модуль функций Функции темы.php
    Добавление стилей и скриптов Зависит (рамки, шрифты, сбросы) Зависит (стили темы и другие, зависящие от темы)
    Поддержка миниатюр и форматов сообщений Всегда
    Создание виджетных областей (register_sidebar) Всегда
    Создание актуальных виджетов Всегда
    Регистрация меню Всегда
    Создание коротких кодов Всегда
    Пользовательские типы сообщений и таксономия Всегда
    Создание нестандартных размеров изображения Зависит (если вы будете использовать их независимо от темы) Зависит (если зависит от темы)
    Настроить админку и панель управления WordPress Всегда
    Пользовательские стили входа в систему для wp-login.php Зависит (если общий с логотипом и персонализированным сообщением) Зависит (если сильно настроен в соответствии с темой)
    Код Google Analytics Всегда
    Функции пользователя и поля профиля Всегда
    Функции Gravatar Всегда
    Добавить классы в body_class и post_class Всегда
    Изменения в разделе Всегда