Вставка PHP кода в WordPress через виджеты. Плагины для PHP в виджетах

25.06.2022

Приветствуют, друзья. Сегодня мы с вами разберемся в том, как заставить работать любой 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; }

Первая строка является фильтром, который заменяет при каждом вызове стандартную функцию текстового виджета на новую – 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 кода есть HTML вставки или текст, то он работать не будет. Любой текст или теги придется вставлять с помощью команды echo, что не всегда удобно. То есть, код должен быть чисто PHP-шный на 100 правильного формата.

Правильно

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

Неправильно

Echo "Эта строка правильная"; Так работать не будет

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

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

Добрый день!

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

Для тех, кто не знает, давайте сначала разберемся с тем, что такое виджет?

Виджет (от англ. widget – штуковина, попсушка =)) – это блок или контейнер, в который можно помещать различный контент: текст, ссылки, html код, изображения.

Вот этот код нужно добавить в файл functions.php , используемой темы:

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

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

function my_widget_execute_php ($ text ) {

if (strpos ($ text , "

Ob_start();

Eval(" ?> ". $ text ) ;

$ text = ob_get_contents () ;

ob_end_clean () ;

return $ text ;

Немного разъяснений для тех, кто хочет понять как работает данный код.

Строка 2 : add_filter – прикрепляет дополнительный код к функции widget_test . Здесь мы используем систему хуков. Об этом я упоминал при . То есть, теперь стандартная функция WordPress widget_text будет “цеплять” код нашей функции my_widget_execute_php .

Строка 3 : Объявление функции my_widget_execute_php . Она принимает один параметр $text , который содержит текст из виджета.

Строка 5 : Если php-код обнаружен, то включаем буферизацию вывода с помощью функции ob_start() . Теперь вся информация, предназначенная для вывода, будет временно помещаться в буфер.

Строка 6 : Функция eval запускает на выполнение php-код, содержащийся в полученной строке $text .

Единственное, перед строкой $text добавляем ‘?>’, чтобы текст, который может присутствовать до кода php не воспринимался как код.

Ошибка:

eval("Популярные статьи: ");

Строка “Популярные статьи” воспринимается функцией eval как код к выполнению.

Верно:

eval("?> Популярные статьи: ");

Теперь строка расположена между закрывающим ‘?>’ и открывающим ‘

Строка 7 : Получаем содержимое буфера в переменную $text

Строка 8 : ob_end_clean() – очищаем буфер и отключаем буферизацию

Строка 10 : Возвращаем результат работы функции в виджет.

Вот и всё! Теперь вы можете вставлять любой код в виджет WordPress!

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

Напишите в комментарии ваши идеи насчет того, что еще можно выводить в виджет? Классно будет, если предложенный вариант не реализован в существующих плагинах и скриптах. По крайней мере, тех, что известны и широко распространены. Если идея мне понравится – я попробую её реализовать. Спасибо за участие!

Всё, пока! До новых встреч!

Оригинальных виджетов!

Здравствуйте, уважаемые друзья!

В этот раз будет, пожалуй, одна из самых коротких и легких статей.

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

А зачастую туда хочется разместить какой-то php код, выводящий список популярных или наиболее комментируемых записей. Взять тот же блок ТОП комментаторов, который стоит на каждом блоге. Если данные вещи делать без плагина, то нужно будет размещать php код в виджете.

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

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

Делается все очень просто, как с плагином, так и без. Я покажу 2 способа, но настоятельно рекомендую делать без плагина, так как все до невозможности просто.

Поддержка PHP в виджете без плагина

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

function php_in_widgets($widget_content) { if (strpos($widget_content, "<" . "?") !== false) { ob_start(); eval("?" . ">" . $widget_content); $widget_content = ob_get_contents(); ob_end_clean(); } return $widget_content; } add_filter("widget_text", "php_in_widgets", 99);

function php_in_widgets ($widget_content ) {

if (strpos ($widget_content , "<" . "?" ) !== false ) {

ob_start () ;

eval ("?" . ">" . $widget_content ) ;

$widget_content = ob_get_contents () ;

ob_end_clean () ;

return $widget_content ;

add_filter ("widget_text" , "php_in_widgets" , 99 ) ;

Разместить его проще в самом конце перед закрывающим тегом?>.

Vожет быть ситуация, когда в вашем файле данного тега не будет. Тогда придется разместить где-то между другими кодами. Но, если вы вообще не разбираетесь в содержимом этого файла, то так не делайте.

Поступим проще - разместим код в самом начале файла перед открывающим тегом



Далее сохраняете файл и заменяете им исходный файл на хостинге. Теперь на вашем сайте на WordPress должна работать поддержка php кода в виджетах. Размещаем такие коды через обычный текстовый виджет.

Способ без плагина мы рассмотрели. Надеюсь, вы его и выберите. Ну, если же вас он чем-то не устроил, то идем далее.

Плагин PHP Code Widget

Второй способ подразумевает под названием PHP Code Widget , после чего появится новый виджет под названием «PHP Code».

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

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

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

Если вас интересуют другие материалы по реализации различных функций без плагинов, то вот некоторый список:

Этот список постоянно обновляется. Поэтому, следите за новыми статьями и делайте свой сайт лучше. На этом буду закругляться. Статья, как и обещал, вышла очень простая и короткая.

Писал ее, так сказать, как разбавку к большим подробным мануалам, так как не всегда хватает сил и времени уделять внимание на рассмотрение обширных тем. Но я постараюсь вас дальше радовать именно подробнейшими материалами с видео-уроками.

Если что-то конкретное хотите видеть, то всегда имеется форма комментариев. Пишите все, что пожелаете. Кроме спама конечно. А на этом я заканчиваю.

С уважением, Константин Хмелев!

В wordpress, по сути, существует 2 разных подхода для добавления функциональных элементов в сайдбар или футер блога — это использование виджетов, а также добавления php кода и специальных wordpress функций в файлы шаблона. Первый вариант удобнее для пользователей без сильной технической подготовки, весьма нагляден и прост, второй — разработчикам, которые хотят управлять всеми нюансами отображаемой информации. Но иногда возникает задача, когда нужно эти 2 подхода совместить. Самый простой пример это когда вы создаете сайт под заказчика — он должен получить работающую админку с некоторыми несложными (!) опциями для управления проектом. Вы же не будете его вводить в курс дела по различным вордпресс функциям, какие параметры там есть как работают и т.п. В таком случае, без виджетов не обойтись.

Обновление 19.06.2019: По последним данным виджет PHP Code не обновлялся уже года два и более, поэтому как альтернативу советую обратить внимание на продвинутый где кроме PHP работает с JavaScript, HTML/CSS и шорткодами — универсальная штука!

В одном из прошлых постов я уже рассказывал процесс это не такой сложный, как может показаться на первый взгляд. Хотя, в принципе, почти все wordpress темы уже изначально поддерживают виджеты. Второй нюанс в данном вопросе — не все задачи можно решить с помощью стандартного набора видежтов, которые имеют лишь базовые настройки — заголовок и пару опций. В то время как WP предоставляет куда больший функционал, что иногда приходится использовать. Взять хотя бы виджет «Свежие записи» и сравнить его с — виджет позволят выбрать только количество ссылок в блоке, ни тебе сортировки, оформления, типа архива. Виджеты удобные, но зачастую предоставляют мало опций. Помогает в этом деле — добавление PHP кода непосредственно через виджеты с помощью плагина PHP Code Widget.

Плагин PHP Code Widget

Данный плагин добавляет в wordpress новый тип виджета, который очень похож на стандартный текстовый блок. Называется он PHP Code. Скачать плагин можно , установка стандартная — копируете файл плагина в /wp-content/plugins/, активируете в админке, после чего на странице виджетов появится новый элемент.

Дабы добавить php код просто перетаскиваете виджет в нужное место панели вижетов шаблона и в текстовом поле пишите свой php код. Важно при этом использовать правильный синтаксис дабы не возникало ошибок, а интерпретатор воспринял код как нужно! Как видите, плагин предельно прост в использовании, протестирован мною на парочке сайтов, где отлично работает.

Что же касается плагин PHP Code Widget, то сам принцип добавления кода через виджеты поможет пользователю полностью перейти на работу с шаблоном через механизм виджетов. Даже, если пользователь не слишком силен в технических аспектах, порядок отключения или изменения определенных элементов шаблона будет намного проще чем поиск нужного участка кода в файлах шаблона. С помощью такого подхода можно также легко работать с уже созданными работающими сайтами, которые поддерживают вижджеты и где вам нужно внести какие-то изменения. Например добавить код sape в wordpress — через виджеты пользователь сможет понять где и что у него отображается. Или вам заказали разработку каких-то изменений на сайте, а внедрение их в файлы шаблона не так просто реализовать — допустим имеется блок с табами, где в одну из закладок нужно вывести информацию — весьма нецелесообразно удалять плагины табов, потом добавлять их поддержку вручную через шаблон, а дальше уже вставлять код требуемых изменений. Во много раз проще установить плагин PHP Code Widget и добавить информацию в табы через виджеты.

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

P.S. Заказывать книги в интернете стало еще проще — специальный книжный интернет магазин онлайн имеет широкий выбор товаров, доступные цены и доставку прямо к вам домой.
Одесские автомеханики могут все, если нужны стартеры и автомобильные генераторы в Одессе купить или заказать в вместе с установкой — нет проблем, обращайтесь в Starter.od.ua.

У нас никак не получается прописать какой-то код PHP в виджет? …то есть прописать-то получается, а вот заставить его работать — нет! — хотя удалось раздобыть такую здоровскую примочку в web волнах интернетing))

Трагедия, думается нам! Но это не так! Для этого существует ФИЛЬТР-РАЗРЕШЕНИЕ на отработку php функций в виджетах сайдбара, но! обо всём по порядку…

(После обновления Вордпресс 4.8 эта статья как бы стала не очень актуальной, ибо и функционал WP виджетов несколько обновился! стало не очень удобно работать с php кодом в текстовом виджете, который позволяет управлять контентом более тонко!

Как вернуть старый текстовый виджет? …чуть ниже будет ссылка на пост, в котором решение задачи)


Разделы статьи:

Расширяем php возможность виджетов

Внимание!!

…админам, которым не хочется копаться в коде лично, смею предложить свой плагин , который создаёт классический текстовый виджет.

Плагин умеет:

сразу же после установки и активации, в разделе «виджеты» появится новый RealMik — html, php, шорткод… — в текстовое окошко которого возможно прописывать любые php коды или шорткоды, которые тут же отработают на стороне фронтэнда!

Плагин не вызывает нагрузок на сервер… и никаких конфликтов скриптов!

Скачать плагин-виджет запросто!! в депозитарии Вордпрес — WordPress.org или на страничке по ссылке выше.

Но, для тех, которые хотят разобраться с механикой отработки php в виджете лично!! — ниже подробная статья:

Например, вы хотели, не применяя плагинов!!! расширить возможности своего блога, а именно, прописать код (полезная штука для оптимизации)) ну, или что-то иное, не важно… И, когда вы подошли к основному процессу выбора места, для «примочки», то, естественно, многие предпочитают прописывать этот код в виджете сайдбара — это удобно — да вот беда: такую возможность система WordPress изначально почему-то запретила КОМАНДОЙ на запрет отработки php в виджетах сайта/блога.

И что же!?

…всё бросать!? …когда уже в файл функций прикручен код ТОПа комментаторов, да и в файле CSS уже есть какие-то симпатичные задумки-намётки..??

Ни в коем случае. Для реализации отработки php в виджете, существует множество возможностей и разных способов (), которые дают команду системе WordPress «разрешить» пользовательские (то бишь наши) настройки, если сказать просто. Ну, ладно…

…реализуем возможность прописки и отработки PHP-кода в наших виджетах.

В следующих статьях:

рассмотрим — как вводному текстовому выражению задать прямо в html документе требуемый цвет.

...город веб мастеров Михалика.ru © - запросто с WordPress