В wordpress, по сути, существует 2 разных подхода для добавления функциональных элементов в сайдбар или футер блога — это использование виджетов, а также добавления php кода и специальных wordpress функций в файлы шаблона. Первый вариант удобнее для пользователей без сильной технической подготовки, весьма нагляден и прост, второй — разработчикам, которые хотят управлять всеми нюансами отображаемой информации. Но иногда возникает задача, когда нужно эти 2 подхода совместить. Самый простой пример это когда вы создаете сайт под заказчика — он должен получить работающую админку с некоторыми несложными (!) опциями для управления проектом. Вы же не будете его вводить в курс дела по различным вордпресс функциям, какие параметры там есть как работают и т.п. В таком случае, без виджетов не обойтись.
В одном из прошлых постов я уже рассказывал процесс это не такой сложный, как может показаться на первый взгляд. Хотя, в принципе, почти все wordpress темы уже изначально поддерживают виджеты. Второй нюанс в данном вопросе — не все задачи можно решить с помощью стандартного набора видежтов, которые имеют лишь базовые настройки — заголовок и пару опций. В то время как WP предоставляет куда больший функционал, что иногда приходится использовать. Взять хотя бы виджет «Свежие записи» и сравнить его с — виджет позволят выбрать только количество ссылок в блоке, ни тебе сортировки, оформления, типа архива. Виджеты удобные, но зачастую предоставляют мало опций. Помогает в этом деле — добавление PHP кода непосредственно через виджеты с помощью плагина PHP Code Widget.
Плагин PHP Code Widget
Данный плагин добавляет в wordpress новый тип виджета, который очень похож на стандартный текстовый блок. Называется он PHP Code. Скачать плагин можно , установка стандартная — копируете файл плагина в /wp-content/plugins/, активируете в админке, после чего на странице виджетов появится новый элемент.
Дабы добавить php код просто перетаскиваете виджет в нужное место панели вижетов шаблона и в текстовом поле пишите свой php код. Важно при этом использовать правильный синтаксис дабы не возникало ошибок, а интерпретатор воспринял код как нужно! Как видите, плагин предельно прост в использовании, протестирован мною на парочке сайтов, где отлично работает. Как альтернативу могу также посоветовать продвинутый , который кроме PHP работает с JavaScript и шорткодами.
Что же касается плагин PHP Code Widget, то сам принцип добавления кода через виджеты поможет пользователю полностью перейти на работу с шаблоном через механизм виджетов. Даже, если пользователь не слишком силен в технических аспектах, порядок отключения или изменения определенных элементов шаблона будет намного проще чем поиск нужного участка кода в файлах шаблона. С помощью такого подхода можно также легко работать с уже созданными работающими сайтами, которые поддерживают вижджеты и где вам нужно внести какие-то изменения. Например добавить код sape в wordpress — через виджеты пользователь сможет понять где и что у него отображается. Или вам заказали разработку каких-то изменений на сайте, а внедрение их в файлы шаблона не так просто реализовать — допустим имеется блок с табами, где в одну из закладок нужно вывести информацию — весьма нецелесообразно удалять плагины табов, потом добавлять их поддержку вручную через шаблон, а дальше уже вставлять код требуемых изменений. Во много раз проще установить плагин PHP Code Widget и добавить информацию в табы через виджеты.
В общем, нельзя сказать, что необходимость добавления PHP кода через виджеты есть всегда, но иногда такая задача, как видите, может возникнуть. В этом случае PHP Code Widget поможет решить все вопросы легко и быстро. Простой такой, но весьма полезный модуль.
P.S. Заказывать книги в интернете стало еще проще — специальный книжный интернет магазин онлайн имеет широкий выбор товаров, доступные цены и доставку прямо к вам домой.
Одесские автомеханики могут все, если нужны стартеры и автомобильные генераторы в Одессе купить или заказать в вместе с установкой — нет проблем, обращайтесь в Starter.od.ua.
В WordPress заложена функция на исполнение HTML кодов, вставленных в статические или постовые страницы, а также через виджет "Текст ". Кроме этого он умеет исправлять некорректный HTML код.
Но как сделать выполнение PHP кода на страницах своего блога тем, кто не знаком с тонкостями PHP и не сможет без этих знаний правильно вставить php код в пост или страницу?
Благодаря гибкости WP, проблему можно решить установкой расширения Exec-PHP. Благодаря этому плагину, ваш php код, вставленный в страницу или в запись блога в HTML редакторе, будет исполняться. Кроме этого плагин в силах выполнить php код в текстовых виджетах. Тем, кому необходимо установить php код в сайдбар или в футер блога, подойдет более легковесный плагин .
Установка и настройка Exec-PHP.
- Скачать последнюю версию плагина со страницы автора можно .
- Установить и активировать плагин.
Если в настройках плагина Параметры → Exec - PHP вы не снимите галку, стоящую по умолчанию у "Выполнение PHP кода в текстовых виджетах ", то код будет выполняться и в виджете вордпресса "Текст ".
Далее перейдите в Параметры → Написание и снимите галку у "WordPress должен исправлять некорректный HTML код автоматически ".
Это все. Ваш php код будет выполняться и в виджете "Текст ", и в странице или записи блога, куда-бы вы его не вставили.
Вставка PHP кода на страницу обновлено: Декабрь 24, 2016 автором: Роман Ваховский
Это главный файл в вашей теме 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)
- Настройка дополнительного функционала админки (например, )
- Конфигурирование исходного кода ()
- Определение шорткодов
- Регистрация
Списки неполные, вы можете определить их содержание сами под себя.
Куда внести данный код, если не в 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/
В него мы помещаем нужные файлы-плагины. В отличие от обычных плагинов, здесь не нужно выдерживать специальный синтаксис, а функционал можно объявлять напрямую
Здесь для примера создан файл с кодом счётчиков посещаемости.
Внутри этот файл выглядит вот так
// ... Вместо этой строки вставляем код счётчиков...
В админке он будет выглядеть как Необходимые
Каждый знакомый с 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 и сделаем из него плагин - это просто!
Чтобы создать плагин нужно создать файл с кодом ниже (название файла может быть любое), добавить его в каталог плагинов 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 <<<<<<<<<<<< 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 - сайт перестает работать.
Вставляете готовый код - сайт перестает работать.
Чаще всего, дело в открывающем и закрывающем тегах PHP . Обычно, если вставляемый код имеет в начале и в конце эти теги, то их нужно удалить. Также, файл functions.php не должен выводить на экран никакой текст (HTML код или другой контент). Вывод текста допускается только внутри функции, которые в дальнейшем будут использоваться в шаблоне или которые прикрепляются к хукам (подробнее см. ниже).
Нельзя допускать никаких символов до , в том числе невидимые символы (перенос строки), потому что functions.php подключается до установки http заголовков (в таких заголовках передаются различные данные, например, что это html документ; что кодировка utf-8 другое). По правилам PHP, контент должен выводится на экран после того, как отправлены заголовки. А все что за пределами это и есть контент - текст выводимый на экран, даже невидимый символ \n. Поэтому такой текст вызывает ошибку.
Чтобы не было ошибок, учитывайте 4 момента:
#1 Правильная вложенность
Пример, у нас была такая структура:
........здесь код......... ?>
Правильно так:
#2 Никаких переносов строк, пробелов, текста до
Такой код вызовет ошибку:
А этот нет:
Логичнее его записать так:
Бывает что перенос строки ставят в самом конце functions.php, вот тогда это становится настоящей проблемой, потому что все казалось бы правильно, но сайт не работает. На самом деле после?> или до
здесь пустая строчка
По этой причине многие разработчики вообще удаляют закрывающий тег?> , это допустимо для PHP. Рекомендую всегда делать именно так:
#3 Использование внутри PHP функции
Если в functions.php присутствует функция, то внутри этой функции можно использовать теги , например, для того, чтобы визуально выделить HTML код внутри функции:
Дело в том, что в этом случае функция только лишь регистрируется и не выполняет никаких действий. Все что внутри функции (между { }) не работает пока эта функция не будет вызвана, а вызываются такие функции обычно из шаблона или через фильтры, уже после того как отправлены HTTP заголовки. Поэтому в данном примере, мы можем игнорировать переносы строк и использовать?> и
#4 Кодировка
Еще одна заметка касательно файла functions.php: устанавливайте файлу кодировку UTF-8 (UTF-8 без BOM). Иначе, если функции в файле будет текст на кириллице, то он выведется непонятными символами: кракозябрами, каракулями - называйте как хотите.
В этом руководстве мы подробно рассмотрим как создать плагин WordPress со своей собственной страницей администрирования. Характерная особенность любого плагина – это отделение своего кода от кода ядра WordPress. Если с плагином что-то произойдёт, остальная часть сайта будет работать.
- Текстовый редактор
Для выполнения шагов этого руководства вам понадобиться текстовый редактор, например, Notepad++ или среда разработки NetBeans . Также вам нужен доступ по FTP в вашей учётной записи на хостинге и .
Данное плагин WordPress руководство написано для тех, кто уже имеет . По руководству мы создадим новую функцию, вызовем существующие функции WordPress, используя их как параметры.
Что такое плагин WordPress?
Плагин WordPress – это автономный код, который улучшает и расширяет функциональность WordPress. Используя любую комбинацию PHP, HTML, CSS, JavaScript/jQuery или ряда других языков программирования, плагин WordPress может добавить новые характеристики к любой части вашего сайта, включая Консоль Администрирования. Вы можете изменять поведение WordPress по умолчанию или полностью удалять ненужное поведение. Плагины позволяют легко настраивать WordPress под себя и свои потребности.
Поскольку плагин WordPress это отдельный код, он не пересекается непосредственно с какой либо частью кода ядра WordPress. Плагин может быть скопирован или установлен на любую установку WordPress. Альтернативный (и очень не рекомендуемый) путь внесения изменений в WordPress – написание новой функции в файл WordPress functions.php , который находится в каталоге /wp-includes/ или в файл functions.php , который является частью вашей темы. Это может привести к ряду возможных проблем.
WordPress и его темы регулярно обновляются. И пока вы используете дочернюю тему WordPress , очередное обновление будет перезаписывать файл functions.php , а добавленный вами новый код будет удален и придётся его добавлять снова и снова. Ещё один неудобный момент может возникнуть, если вы напишете много функций и в одной из них будет ошибка, которую вы никак не может отследить, вам может потребоваться заменить текущий файл оригинальным, однако при этом придётся пожертвовать всеми остальными функциями. Это повлечёт за собой большое количество PHP-ошибок на сайте, потому как вызовы уже удалённых функций ещё будут осуществляться из других мест.
Плагины же никогда автоматически не перезаписываются и не удаляются при обновлении WordPress. Если в коде вашего плагина WordPress есть ошибки, вы можете просто отключить его в Админ Консоли на время исправления ошибки. В случае, если в вашем плагине серьёзная ошибка, WordPress иногда может самостоятельно автоматически отключить его, чтобы сохранить функционирование всего сайта.
Что такое хук (hook)?
Плагины WordPress взаимодействуют с кодом ядра через так называемые хуки (hooks , от англ. hook – крючок). К ним, как к крючкам можно “цеплять” выполнение каких-либо интересных нам функций. В WordPress есть два вида хуков:
- Action hooks или хуки-события (добавить/удалить пользовательскую функцию к некоторому событию).
- Filter hooks или хуки-фильтры (для изменения данных, обрабатываемых функциями).
События и Хуки-события
Посещение любой страницы WordPress-сайта – это вызов множества функций PHP (называемых событиями – actions ). Функции привязываются к хукам-событиям (action hooks) . Механизм хуков-событий предоставляется WordPress. Вы можете добавлять свои функции к какому-либо событию из списка событий, используя механизм хуков и они будут запускаться по запуску этого события. Вы также можете удалять уже существующие функции из любого списка хуков-событий. Хуки-события привязаны к выполнению определённого события. Например, перед закрытием тега на любой странице, вызывается хук-событие wp_head() и запускается ряд функций, которые привязаны к этому хуку wp_head() .
Добавление функций на хук события, используя add_action()
Чтобы добавить функцию на любой хук-событие, ваш плагин WordPress должен вызвать функцию WordPress под названием add_action() , как минимум с двумя параметрами.
// Хук события "init", вызывается после того, как WordPress завершает загрузку кода ядра add_action("init", "add_Cookie"); // Установка cookie с текущим временем дня function add_Cookie() { setcookie("last_visit_time", date("r"), time()+60*60*24*30, "/"); }
- хука-события (action hook) , к которому собираемся связать свою функцию.
- Второй обязательный параметр – имя функции (function) , которую будем запускать.
- приоритет (priority) функции, которую вы собираетесь запустить. Вы можете привязать сколько угодно функций к одном хуку события и обращаться к ним в любом порядке. Приоритет запуска по умолчанию – 10, ваша функция запускается сразу после встроенных функций WordPress. Функция с приоритетом 11 запустится следующей и так далее.
- количество аргументов , означает сколько параметров ваша пользовательская функция может принять. По умолчанию количество параметров равно 1.
Пример кода плагина для отображения текста после раздела футера (footer) на каждой странице
Этот плагин WordPress перехватывает хук-событие wp_footer() , который вызывается сразу перед закрытием тега