Отступление plugin php. Лучший способ разрешить плагины для PHP-приложения. Как внедрить исполняемый PHP код в WordPress с плагином Exec-PHP

В этом руководстве мы подробно рассмотрим как создать плагин 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 есть два вида хуков:

  1. Action hooks или хуки-события (добавить/удалить пользовательскую функцию к некоторому событию).
  2. 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() , который вызывается сразу перед закрытием тега на каждой странице и добавляет новую функцию под названием mfp_Add_Text() . Так как плагин WordPress не привязывается к теме, то функционал будет работать даже при смене темы на другую. Можете сохранить себе этот пример в файл PHP, загрузить его в каталог wp-content/plugins/ и активировать в Админ Консоли, чтобы увидеть изменения.

"; } ?>

Вот результат:

Примечание: PHP загружает содержимое сразу всего скрипта перед его выполнением, это значит, что вы можете вызвать add_action() перед определением вашей функции: вызвать add_action() с вашими функциями вначале файла в том порядке, в котором они будут загружаться, потом определить ваши функции в таком же порядке ниже. Такое структурирование кода сделает файл более лёгким для чтения.

Удаление функций из хуков-событий, используя remove_action()

Для удаления функции, связанной с хуком-событием, нужно воспользоваться remove_action() . Пример ниже поможет понять принцип работы добавления и удаления функций в/из хука событий.

// Хук на событие "init", который вызывается после завершения загрузки ядра WordPress и функция "remove_My_Meta_Tags" add_action("init", "remove_My_Meta_Tags"); // Удаляем функцию "add_My_Meta_Tags" из хука-события wp_head function remove_My_Meta_Tags() { remove_action("wp_head", "add_My_Meta_Tags"); }

Запускается remove_action() как минимум в двумя параметрами.

  • Первый обязательный параметр – название хука-события (action hook) , к которому функция была прикреплена
  • Второй обязательный параметр – это имя функции (function) , которую вы хотите удалить
  • Третий (необязательный) параметр – это приоритет удаляемой функции. Этот параметр должен совпадать с тем приоритетом, который был задан при добавлении события к хуку событий. Если он не был определён, не включайте этот параметр.

Пример: представим, что вы хотите, чтобы текст, добавленный в футере в предыдущем примере, не выводился по понедельникам. Один из путей реализации этого, использовать функцию даты в PHP, чтобы получить текущий день недели, проходя условным оператором if…then… и проверяя соответствует ли текущий день понедельнику, затем вызвать remove_action(), если это понедельник. Вызываем функцию проверки и удаления по дню недели при помощи add_action() , прикрепляясь к событию, происходящему раньше (например, wp_head ), чем то, к которому прикреплено наше основное действие выведения текста в футере (wp_footer) . Если мы выберем событие происходящее позже, чем wp_footer , удаления не произойдёт, поскольку страница уже будет сгенерирована.

После загрузки футера сайта добавляется мой текст!

"; } // Определение функции "mfp_Remove_Text()" удаление нашей предыдущей функции из события "wp_footer" function mfp_Remove_Text() { if (date("l") === "Monday") { // Target the "wp_footer" action, remove the "mfp_Add_Text" function from it remove_action("wp_footer", "mfp_Add_Text"); } } ?>

Фильтры и хуки-фильтры

Функции фильтры позволяют изменять возвращаемые другими функциями данные и должны быть прежде перехвачены при помощи хуков-фильтров . Хуки-фильтры несколько отличаются от хуков-событий. Однако, работают они подобно хукам-событиям – могут быть вызваны в разных точках скрипта и контекстно. Полный список хуков-фильтров и контекста вызова можно найти на WordPress Plugin API/Filter Reference page.

Добавление фильтров, используя add_filter()

Чтобы добавить любую функцию к хуку-фильтру, ваш плагин должен вызвать функцию WordPress под названием add_filter() , с как минимум двумя параметрами.

// Перехват хука-фильтра "the_content" (содержимое любого поста), запуск функции "mfp_Fix_Text_Spacing" add_filter("the_content", "mfp_Fix_Text_Spacing"); // Автоматическое исправление двойного пробела function mfp_Fix_Text_Spacing($the_Post) { $the_New_Post = str_replace(" ", " ", $the_Post); return $the_New_Post; }

  • Первый обязательный параметр – это название хук-фильтра (filter hook) , на который хотим повесить функцию.
  • Второй параметр – это имя функции фильтра (filter function), которую хотим запустить.
  • Третий параметр (необязательный) – это приоритет (priority) функции, которую вы хотите запустить. В хуку-фильтру можно добавить сколько угодно разных фильтров функций. Приоритет по умолчанию – 10, устанавливает очередь вашей пользовательской функции после любой встроенной функции. Функция с приоритетом 11 запустится следующей и так далее.
  • Четвёртый параметр (необязательный) – это количество аргументов , который означает сколько параметров ваша пользовательская функция может принять. По умолчанию количество параметров равно 1.

Пример. Плагин WordPress для изменения фрагмента/выдержки записи

В WordPress есть функция, которая извлекает отрывок (цитату) из записи, называется она get_the_excerpt() , и также является хуком-фильтром. Функция, отображающая отрывок, вызывает get_the_excerpt(), чтоб его получить, это то место, где применяется фильтр и отрывок изменяется до отображения. Этот плагин WordPress определяет функцию фильтр, которая берёт отрывок текста как входной параметр, добавляет некоторый текст вначале него и возвращает новое значение каждый раз, когда вызывается get_the_excerpt() . Так как возвращаемое функцией get_the_excerpt() значение – это фактический фрагмент текста, он автоматически вводится как параметр функции $old_Excerpt, когда вызывается, используя add_filter(). Функция, которую вы определяете должна вернуть новое значение .

Excerpt: " . $old_Excerpt; return $new_Excerpt; } ?>

Итоговый результат:


Удаление фильтров, используя remove_filter()

Для удаления фильтра нужно просто вызвать функцию remove_filter() . Например, добавим снова простое условие и будем удалять текст, если сегодня четверг.

// Хук-фильтр get_the_excerpt, запуск функции mfp_Add_Text_To_Excerpt add_filter("get_the_excerpt", "mfp_Add_Text_To_Excerpt"); // Если сегодня четверг, удалить фильтр the_excerpt() if (date("l") === "Thursday") { remove_filter("get_the_excerpt", "mfp_Add_Text_To_Excerpt"); } // Взять отрывок, добавить текст и вернуть новый отрывок function mfp_Add_Text_To_Excerpt($old_Excerpt) { $new_Excerpt = "Excerpt: " . $old_Excerpt; return $new_Excerpt; }

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

Шаг 1 – Сохранение плагина

Первым шагом в создании плагина для WordPress является создания каталога для хранения всех файлов. Все плагины хранятся в каталоге: /wp-content/plugins/ . Каталог, который вы создаёте должен иметь уникальное и понятное название, не пересекающееся с другими плагинами. Поключитесь к своему аккаунту на хостинге по FTP . Из основного каталога WordPress перейдите в wp-content потом в plugins . Внутри каталога plugins создайте новый каталог с названием my-first-plugin .


Отдельные файлы с кодом плагина лучше тематически разделять по подкаталогам внутри основного каталога плагина вместо того, чтобы хранить всё в одном каталоге, это позволит не путаться и будет хорошим смысловым разделением исходных файлов плагина. Особенно разделение файлов по смыслу будет хорошо ощутимо, когда ваш плагин будет разрастаться и становиться более сложным. Если ваш плагин использует свои стили CSS создайте каталог CSS и сохраните туда все файлы CSS. Если ваш плагин WordPress использует JavaScript создайте каталог JavaScript .

Шаг 2 – Создание первого файла

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

В вашем каталоге my-first-plugin создайте новый PHP-файл и назовите его my-first-plugin.php . Хорошей практикой является название основного файла плагина также как и каталога. Добавьте открывающий тег PHP в первой строке. Вам не обязательно добавлять закрывающий тег в конце файла (чтобы понять почему, почитайте примечание на странице PHP мануала). Этот файл будет содержать прежде всего так называемые ‘header comments’ или заголовочные комментарии с информацией, которая будет прочитана и отображена WordPress. Header comments заключается в многострочный комментарий PHP, в каждой строке определяется специальная информация, начинающаяся со специальных символов, чтобы можно было определить, к чему эта строка относится. Такая структура должна присутствовать только в первом файле и её не нужно повторять в остальных.

Первой строкой в комментарии в файле my-first-plugin.php нужно добавить имя плагина. Начинайте многострочный комментарий PHP открывая его символами /* во второй строке файла, сразу после тега открытия PHP. В третьей строке напишите Plugin Name: My First Plugin. В двух следующих отдельных строкахможно указать описание плагина и имя автора.Затем, со следующей строки закрываем блок комментариев символами */ . Ваш файл теперь выглядит примерно так:

Имя автора .

Шаг 3 – Написание функций плагина

Как уже было сказано выше, хорошей практикой является разделение кода плагина в соответствующие файлы и каталоги. Так как основная функция первого файла в том, чтобы содержать в себе информацию о плагине, то сам плагин WordPress разместим в других файлах и каталогах и воспользуемся функцией PHP ‘include’ для доступа к ним. Любые файлы, хранящиеся в подкаталогах вызываются прямо из нашего кода и только из нашего кода, поэтому имя подкаталога не нуждается в префиксе. Однако, весьма рекомендуем применять уникальный префикс для ваших файлов, функций и переменных, чтобы избежать конфликтов с другими плагинами. В связи в этим мы будем использовать префикс mfp , сокращение от ‘My First Plugin’.

В главном каталоге вашего плагина создайте новый подкаталог с названием includes. Любой файл, который будет подключатся по ‘include’ в другом файле будет идти в этот подкаталог. Создайте новый файл PHP в подкаталоге includes и сохраните его как mfp-functions.php. Открываем тег в первой строке. В этом новом файле будут храниться функции вашего плагина.

Теперь вернитесь к my-first-plugin.php в основном каталоге плагина. Нам нужно подключить файл mfp-functions.php , для того чтобы использовать новые функции. Так как это главный файл плагина, подключение mfp-functions.php здесь сделает функции доступными в любом другом файле вашего плагина. Используйте require_once , чтобы один раз подключить файл с функциями и чтобы быть уверенным, что плагин работает только, если функции доступны. Самый простой путь подключения файлов из вашего каталога плагинов – это использование функции WordPress plugin_dir_path(__FILE__) , которая выдаёт полный путь к директории, где наш плагин WordPress хранится, потом использовать . (period), чтобы дополнить именем подкаталога, который мы создали раньше (includes ), затем имя созданного нами файла (mfp-functions.php ).

Редактируем my-first-plugin.php как показано ниже, потом сохраняем и загружаем ещё раз, перезаписывая предыдущую версию.

Вернёмся к mfp-functions.php в подкаталоге includes .

Хорошая идея объединить несколько функций вместе и написать многострочный комментарий над каждой группой, описывая группу, затем короткий однострочный комментарий перед каждой из функций с её описанием. Таким образом вам не придётся читать весь код в поисках функции и распознаванию, что она делает. Назовём функцию mfp_Add_My_Admin_Link(). Она будет добавлять новую верхнюю ссылку в Админ Консоли в меню навигации.

Резюмируя, пишем новую функцию следуя этим шагам:

  • Пишем комментарии, описывающие функцию
  • Называем функцию
  • Пишем функцию

В mfp-functions.php, пишем следующее:

Внутри нашей функции нам нужно использовать встроенную функцию WordPress add_menu_page() , чтобы задать имя меню, заголовок и определить, кто может её видеть. Затем мы говорим, что отображать, когда мы переходим на страницу. Вы можете также добавить к ссылке в меню иконку и установить её позицию в меню навигации админ панели – и то и другое по желанию, поэтому в нашем руководстве мы на этом не будем останавливаться. Рядом со ссылкой на вашу страницу будет отображаться иконка по умолчанию. Наша ссылка появится внизу меню навигации админ консоли. Вся эта информация вводится как параметры в add_menu_page() .

Четыре необходимых параметра add_menu_page() – каждый с новой строки для лучшей наглядности:

  1. Название страницы, которую вы увидите после нажатия на ссылку (отображается во вкладке браузера).
  2. Текст, отображаемый в ссылке меню (отображается в списке навигации Админ Консоли), это может быть название вашего плагина.
  3. Требования к возможностям пользователя видеть меню, в этом примере только пользователи с возможностью ‘manage_options’ могут иметь доступ к странице (об этой сейчас не беспокойтесь).
  4. Какой файл использовать, когда открывать страницу (мы создадим его за следующим шагом), который будет храниться в подкаталоге includes и называться mfp-first-acp-page.php. URL введённый здесь известен как ‘slug’.

Прежде чем мы продолжим, важно знать, что есть альтернативный путь использования этой функции. Четвертый параметр может быть просто строкой текста, которая отображается в ссылке url после ‘wp-admin/admin.php?page=’ . Если вы введёте ‘my-plugin-page’, URL станет ‘wp-admin/admin.php?page=my-plugin-page’ . Четвёртый параметр тогда должен быть именем функции, которая выводит что-либо. Вы можете написать функцию, которая лишь выводить ‘Welcome to page 1’, например. Значительно проще создать PHP файл, который будет содержать вашу страницу.

Редактируем mfp-functions.php, удаляем // My code goes here, заменяем его на add_menu_page() и передаём параметры, как показано ниже:

Чтобы запустить эту функцию нам нужно использовать функцию WordPress под названием add_action() с двумя параметрами, как описано в разделе ‘Добавление функций на хук-событие’ этого руководства. Вы можете перечитать этот раздел перед тем, как продолжить.

  • Первый параметр – action hook, который вы хотите отловить. В нашем случае хук события это admin_menu – это значит, наша функция загружается тогда, когда Админ меню начинает генерироваться.
  • Второй параметр – просто имя запускаемой функции. Функция, которую мы написали называется mfp_Add_My_Admin_Link . Обратите внимание, что круглые скобки здесь не пишутся. Помните, что PHP загружает весь скрипт до его запуска, позволяя вам использовать add_action() раньше определения функции, указанной в параметре 2.

Наш окончательный файл выглядит так:

Загрузите файл mfp-functions.php в каталог includes и перезапишите старый.

Шаг 4 – Создание новой админ-страницы

Теперь можно создать страницу, которая будет отображаться при нажатии на ссылку в вашей админ консоли. Вернитесь в подкаталог includes и создайте новый файл PHP с названием mfp-first-acp-page.php. Открывающий тег PHP не обязателен в этом файле, поскольку мы будем использовать только HTML. Напишите HTML-код, как показано ниже и загрузите файл.

Привет!

Это первая страница плагина:)

При создании админ страниц, WordPress рекомендует заключать свой HTML в теги div и давать ему имя класса “wrap”, как показано выше. Это гарантирует, что весь ваш контент появится в правильном месте и будет выглядеть также как и другие админ страницы. Если не придерживаться этой рекомендации, страница может выглядеть не очень привлекательно.

Вернитесь к списку плагинов WordPress в Админ Консоли и активируйте его. Как только страница загрузится, посмотрите вниз мену навигации админ панели. Здесь вы увидите новую ссылку с именем ‘My First Plugin’. Нажмите на неё и вы увидите свою родную страницу админ управления!

Заключение

Поздравляем, вы только что создали свой первый плагин WordPress, добавили новую ссылку в админ меню и отобразили новую страницу в Админ Консоли! Кажется, что это не так уж и много, но это первые уверенные шаги. Теперь, опираясь на полученные знания, вы можете изменять функционал WordPress так, как вам потребуется. Больше знаний о WordPress

In the late 90"s, Denise Dufala"s "People" column in the Cleveland Plain Dealer featured northeast Ohioans making a difference in society, and gave readers good news on page 2 of the Sunday Paper. She consistently advances community-driven, innovative, and sustainable solutions to the region"s most pressing challenges, and service to either one organization or a variety of volunteer activities.. Lakewood women.

Thomasina from Temecula

Family Planning We offer a wide range of contraceptives to help in your family planning. They are the hardest working, committed and fearless women I know.. Temecula women.

Ivy from Hayward

Their bean-counting mentality cares about whether women participate equally, without asking what it is that they are participating in or whether their participation is anything more than ceremonial. But the rest is feminist silence.. Hayward muslim single women.

Lynnette from Sacramento

Pamela Lopez, a partner at a Sacramento lobbying firm, said that for years she has dealt with inappropriate suggestions from male officials, but the most disturbing episode came early last year, at a social gathering of lawmakers and lobbyists in a Sacramento bar. I can deal with it.. Sacramento women.

Elinor from Clarksville

Disqus offers the best add-on tools for websites to increase engagement we help publishers power online discussions with comments and. There you will have an opportunity to find yourself a perfect match based not just on physical appearance but also on physiological compatibility.. Clarksville muslim single women.

Gillian from Sterling Heights

The speaker, identified as a white woman named "Deena," refuses to give her full name or the name of the organization she runs. It"s an important part of the day"s discussions: The ZBA held the first public hearing on the matter on Dec.. Sterling Heights muslim single women.

Eugenia from Olathe

Routes 83 and 81 , as well as the southwestern portion of the state along and south of U. The western third of the state - from roughly the U.. Olathe muslim single women.

Joy from Oxnard

She leads a team of ladies who have a heart to decorate or those who just want to lend a helping hand. She led OC in scoring 17 points , rebounds 8 , assists 5 , and steals 5.. Oxnard women.

Phoebe from St. Louis

But, things are not destined to go smoothly. Currently owned by the state, the preferred stadium site is adjacent to Union Station in the western part of downtown St.. St. Louis women.

Merilyn from Pompano Beach

Shop Lingerie Trendy, Flattering Swimwear for a Stylish Summer Without a stylish bathing suit, could you really consider yourself ready to attend one of the hottest pool parties of the season. You will be able to get a look that best matches your personal style without spending a fortune.. Pompano Beach women.

Rubye from Irving

Members of a Texas chapter of the Ku Klux Klan mingled with the group, undercover, with an eye to holding their own march later on: Loves to laugh and enjoys life. The problem is that Breitbart is almost indescribably bad at basic journalism - the transmission of accurate information.. Irving muslim single women.

Ophelia from Hialeah

According to Florida marriage records, the couple married in She started The Fitness Challenge knowing that something had to change. Citrus continues to provide services to adults and children across the spectrum of mental and behavioral health needs, and is one of the largest mental and behavioral health providers in South Florida.. Hialeah women.

Ericka from Shreveport

Browse bengali singles and personals on lovehabibi - the web"s favorite place for connecting with single bengalis around the world. Single muslim converts muzmatch is the fast growing muslim singles for the way you facilitate and make it easier for young muslim men and women to find one.. Shreveport muslim single women.

Rosanne from Tuscaloosa

In conjunction with UMW, Cultivate strives to provide multiple opportunities for women to gather and develop meaningful relationships as they draw even closer to Christ. Lucado invites readers into a study of Philippians 4: We will practice talking and listening to God through many journaling formats and methods.. Tuscaloosa women.

Stella from Miami

Expert Profile Advice Putting together a first class profile is a really important part of online dating. D writes on why people struggle to let go and identifies the 3 common factors preventing people from moving on.. Miami muslim single women.

Winifred from Las Cruces

The intent of this program is to prevent child abuse and neglect in families experiencing domestic violence by giving these parents the skills and knowledge necessary to decrease the use of violence in their relationships with their children, improve communication skills and break the generational cycle of abuse. Do not leave a regular comment if you want this listing updated quickly.. Las Cruces women.

Hollie from Round Rock

I understand the previous review about the front desk as so many insurance companies require a "referral". Bruce read her scans done through the ER at Seton Williamson.. Round Rock women.

Приветствуют, друзья. Сегодня мы с вами разберемся в том, как заставить работать любой PHP код в виджетах, статьях и на страницах WordPress. По умолчанию такая функция в этой CMS недоступна и максимум, на что может рассчитывать пользователь – это внедрение HTML кода.

Почему PHP код не работает по-умолчанию

Казалось бы, почему разработчики не наградили столь популярный и удобный движок полезными возможностями по автоматическому исполнению PHP кода. Поначалу я задумывался об этом, но пришел к выводу, что такая политика ведется с позиции безопасности, ведь, неумелое применение PHP в виджетах или внутри записей может привести к непоправимым последствиям – в базе данных что-нибудь нарушится и весь сайт крякнет.

Поэтому, работа с PHP отдана на откуп программистов или людей более менее продвинутых в этом вопросе – непосредственно в файлах любые скрипты исполняются.

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

По степени опасности я бы разделил всю эту ситуацию на 3 уровня:

  1. Оставить все как задумали разработчики – безопасно, случайно или умышленно повредить сайт сложно.
  2. Разрешить исполнение PHP в виджетах – средний уровень опасности, только администратор сайта имеет доступ.
  3. Применение кода везде – опасно, так как управлять сайтом может каждый кто допущен к редактированию статей и страниц (модераторы, авторы)

Для чего нужен PHP в виджетах

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

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

В целом, разрешая исполнение PHP, мы можем решить 2 задачи:

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

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

Плагины для PHP в виджетах

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

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

PHP Code Widget

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

PHP Code Widget присутствует в официальном репозитарии WordPress, легко находится по названию. Как устанавливать такие плагины .

Настроек не требуется, виджет в списке появится сразу после установки и активации плагина. В сайдбар перетаскиваете «PHP Code» и добавляете туда любой скрипт.

PHP в виджете WordPress без плагина

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

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

Готовый код:

add_filter("widget_text"," text_html_php_widget ",100); function text_html_php_widget($text) { if(strpos($text,"".$text); $text = ob_get_contents(); ob_end_clean(); } return $text; }

add_filter ("widget_text" , " text_html_php_widget " , 100 ) ;

function text_html_php_widget ($text ) {

if (strpos ($text , "

Ob_start();

Eval(" ?> ". $text ) ;

$text = ob_get_contents () ;

ob_end_clean () ;

return $text ;

Первая строка является фильтром, который заменяет при каждом вызове стандартную функцию текстового виджета на новую – text_html_php_widget, а далее идет описание самой новой функции.

Зачем PHP код в статьях и постах WordPress

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

Но и в постах бывает потребность использования скриптов. Самый частый пример – это вывод карты сайта без плагина. Правда, для карты можно использовать другой приём – сделать специальный шаблон страницы (это отдельная тема).

Мне однажды понадобилось выводить PHP для следующей цели:

Делал я видео сайт. Серии сериала выводились в плейлистах по сезонам и надо было под каждым плейлистом сезона вывести список серий со ссылкой на свою страницу. Похоже на карту сайта, только сложнее – вывод делать надо было списками отдельных рубрик. Можно было вручную HTML кодом каждую ссылку прописать, но там несколько сот серий и процедура муторная. Тем более, при появлении новой серии ссылку на нее пришлось бы добавлять вручную – неудобно. Вот я и решил использовать PHP функции для реализации.

Плагин для исполнения PHP в контенте Exec-PHP

Несмотря на то, что этот плагин не обновлялся уже 7 лет, он прекрасно справляется с обязанностями. И я его выбрал не просто так – он не использует никаких шорткодов, как конкуренты, а дает возможность вставлять в записи WordPress код в чистом виде, начиная с .

Плагин Exec-PHP есть в репозитарии и устанавливается через меню в админке движка.

Из настроек есть только одна – разрешение/запрет на исполнение кода в текстовом виджете, возможности отключить работу в постах и на страницах отсутствует, если надо ее убрать – деактивируем плагин.

Для вставки PHP кода в статью, должен быть переведен в HTML режим (вкладка «Текст»). Визуальный режим, скорее всего, код попортит.

Выполнение PHP кода в статьях WordPress без плагина

По аналогии с виджетами, мы можем заменить плагин на специальную функцию, разрешающую выполнение PHP скриптов в контенте. К сожалению, мне не удалось найти вариант, при котором код работал бы автоматически как в случае с плагином, реагируя на теги. Требуется использование шорткода. Моих познаний в PHP не хватило для самостоятельного написания нужной функции, за сим привожу как есть. Работа с шорткодом имеет существенный недостаток, осложняющий работу, о нем я расскажу ниже.

Как работать с описанной ниже функцией

  1. Вставляем ее в файл functions.php темы;
  2. В нужном месте статьи вставляем конструкцию – исполняемый код без

Функция:

/* Запуск php в статьях и страницах WordPress: код */ function start_php($matches){ eval("ob_start();".$matches."$inline_execute_output = ob_get_contents();ob_end_clean();"); return $inline_execute_output; } function inline_php($content){ $content = preg_replace_callback("/\((.|\n)*?)\[\/startphp\]/", "start_php", $content); $content = preg_replace("/\((.|\n)*?)\[\/startphp\]/", "$1", $content); return $content; } add_filter("the_content", "inline_php");

/* Запуск php в статьях и страницах WordPress: код */

function start_php ($matches ) {

eval ("ob_start();" . $matches [ 1 ] . "$inline_execute_output = ob_get_contents();ob_end_clean();" ) ;

return $inline_execute_output ;

function inline_php ($content ) {

$content = preg_replace_callback ("/\((.|\n)*?)\[\/startphp\]/" , "start_php" , $content ) ;

$content = preg_replace ("/\((.|\n)*?)\[\/startphp\]/" , "$1" , $content ) ;

return $content ;

add_filter ("the_content" , "inline_php" ) ;

Недостаток

Если внутри вставляемого PHP кода есть HTML вставки или текст, то он работать не будет. Любой текст или теги придется вставлять с помощью команды echo, что не всегда удобно. То есть, код должен быть чисто PHP-шный на 100 правильного формата.

Правильно

Echo "Так работать будет";

[ startphp ]

echo "Так работать будет" ;

[ / startphp ]

Неправильно

В 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.




Top