Помещение plugin php. Добавление кода в тег вроде Google Analytics. #2 Никаких переносов строк, пробелов, текста до

  • 14.05.2019

Здравствуйте, уважаемые друзья и гости блога! Сегодняшний пост будет полезен как новичку, так уже и матерому вебмастеру, который еще не знает как можно вставить php код в wordpress на страницы, записи и сайдбар, чтобы он был исполнен движком WordPress.

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

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

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

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

Как вывести исполняемый PHP код в WordPress без плагина?

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

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

/* чтобы вставить исполняемый код php в статьях/страницах WordPress, используйте этот шорткод: код */ function exec_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)*?)\[\/exec\]/", "exec_php", $content); $content = preg_replace("/\((.|\n)*?)\[\/exec\]/", "$1", $content); return $content; } add_filter("the_content", "inline_php", 0);

Затем используйте вот этот шорткод в своих записях и статьях для вставки исполняемого php кода:

Здесь php код

Обязательно, когда Вы будете внедрять свой php код в шорткод, не используйте вот это: «»! То есть ваш исполняемый php код вставляемый в шоткод должен выглядеть не так " " , а вот так "echo date ("Y"); " . И в конечном итоге, когда Вы вставите его в шорткод, он будет выглядеть вот так:

Echo date("Y");

  • Еще одно предупреждение для начинающих вебмастеров!

Исполнение таким образом php кода в ваших записях на WordPress делает ваш движок уязвимым для разного рода хакеров — взломщиков, которые могут им воспользоваться в своих корыстных целях. Для этого Вы должны изменить значение "exec " в коде, который вставляется в файл functions.php на свой, который известен только вам! И соответственно использовать это же значение в шорткодах для вставки в записях.

Этим действием Вы сможете избежать того, что кто-то сможет воспользоваться потенциальной «дырой», образовавшейся в результате использования данной функции — вставить php код в wordpress.

Это то, что касается вставки php кода в WordPress без использования плагина.

А теперь давайте узнаем, как можно еще вставить php код в WordPress, но уже при помощи плагина...

Как внедрить исполняемый PHP код в WordPress с плагином Exec-PHP?

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

Я вам сейчас расскажу о самом безопасном и наиболее функциональном плагине для исполнения php кода в WordPress — это Exec-PHP . Для начала его нужно скачать или с официального сайта WordPress или просто установить из своей админки на сайте. Надеюсь Вы знаете как это делается?! Если не знаете, то посмотрите . Там есть и видео ролик, в котором Вы сможете все увидеть воочию. Хоть там речь идет об установке другого плагина, но принцип один и тот же.

После установки и активации плагина в вашем основном меню админки появится :

Нажмите на нее и Вы попадете в :

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

Затем, чтобы Вы смогли вставить исполняемый php код в wordpress в записях и на страницах, Вы должны у себя в профиле установить галочку в пункте — :

Все. Теперь вы сможете добавить на свои страницы и в записи любой php код в wordpress и он будет исполнен!

Спасибо за внимание! Всем удачи! До новых встреч!

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

Неправильно

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


Конечно, проще и привычнее пойти традиционным путем и тупо вставить сниппет в файл functions.php вашей активной темы. Но в 9 из 10 случаев будет целесообразнее и правильнее вынести код сниппета в отдельный плагин . В крайнем случае, добавить его в специальный функциональный плагин вашего сайта. Т.н. Site-Specific WordPress Plugin , в котором-то и будет храниться весь дополнительный функционал вашего сайта.

Зачем это нужно

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

Как же быть

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

Создаем специальный плагин функций WordPress

На самом деле, все делается очень просто.

  • В директории плагинов вашего WordPress создаете папку. Например: /wp-content/plugins/mysite-plugin/ ;
  • Создаете в этой папке файл, назвав его, к примеру, my-plugin.php ;
  • Вставляете в этот файл примерно такой код:
  • Переходите в настройки управления плагинами и активизируете свой новый плагин.

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

На этом можно и остановиться, но с моей стороны было бы не совсем правильно не упомянуть про т.н. MU-плагины .

MU-плагины (Must Use Plugins)

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

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

Преимущества MU-плагинов

  • MU-плагины не нужно активировать, они всегда активны, их невозможно отключить в консоли управления сайтом;
  • MU-плагин подключается и активируется банальной закачкой файла плагина в директорию mu-plugins;
  • MU-плагины загружаются в алфавитном порядке перед загрузкой обычных плагинов.

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

В заключение

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

Всё самое новое и интересное из мира Вордпресс в моём Телеграм-канале . Подписываемся!

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

Для меня некоторые решения этой проблемы, долгое время, оставались загадкой - вроде ничего не делал, и даже танца с бубном не было, но - раз и все заработало. Почему так происходит? Давайте рассмотрим возможные ситуации из-за которых может "ломаться" сайт и их объяснение:

    Вставляете готовый код - сайт перестает работать.

  1. Редактируете 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 код внутри функции:

это html код

Дело в том, что в этом случае функция только лишь регистрируется и не выполняет никаких действий. Все что внутри функции (между { }) не работает пока эта функция не будет вызвана, а вызываются такие функции обычно из шаблона или через фильтры, уже после того как отправлены HTTP заголовки. Поэтому в данном примере, мы можем игнорировать переносы строк и использовать?> и

#4 Кодировка

Еще одна заметка касательно файла functions.php: устанавливайте файлу кодировку UTF-8 (UTF-8 без BOM). Иначе, если функции в файле будет текст на кириллице, то он выведется непонятными символами: кракозябрами, каракулями - называйте как хотите.