WordPress как на ладони
Готовые темы (шаблоны) для WordPress wordpress jino

Исполняемый php код в записях WordPress

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

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

require('my_script.php');

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

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

/* php в постах или страницах WordPress: [exec]код[/exec]
----------------------------------------------------------------- */
function exec_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('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content);
	$content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content);
	return $content;
}
add_filter('the_content', 'inline_php', 0);

После того, как код добавлен станет возможным использовать в статьях конструкцию такого вида:

[exec]php код[/exec].

"php код" - это код оформленный по всем правилам php.

Чтобы отключить выполнение кода, можно использовать конструкцию [exec off]php код[/exec] - выведет просто код, как если бы мы вставили php код как текст.

Важно о защите

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

Чтобы обезопасить себя от возможных пагубных последствий этого хака, можно сделать следующую простую защиту (то что сразу пришло мне в голову): включать исполнение конструкции [exec]php код[/exec], только в том случае, если, например, у поста есть какое-либо произвольное поле или, скажем, пост написан в 00 минут. Естественно только вы будете знать эту хитрость при которой код будет исполняться и соответственно только вам будет доступна возможность вставить php код в статью.

Исполняемый php код в записях Wordpress 76 комментариев
Полезные 5 Вопросы 8 Все
  • MyDoom

    Работает, но почему-то автоматически заменяет знаки "больше" и "меньше " на символы, чтобы отображаться не как код

    Ответить3 месяца назад #
    • Kama4349

      Потому что так работает WordPress... Вообще я не рекомендую юзать такой подход. Но если уж юзать, то нужно все делать в HTML редкторе, при переключении в Виз редактор, код будет портиться...

      Один из способов решения - это отключить виз редактор если в контенте есть [/exec]. Можно придумать другие костыли...

      Ответить3 месяца назад #
  • Анатолий cайт: svarog-web.ru

    Не работает

    Ответитьмесяц назад #
    • Анатолий cайт: svarog-web.ru

      без вставил и заработало

      Ответитьмесяц назад #
  • Александр

    Добрый день!
    Добавляю вот такую строчку [exec] echo 'HELLO WORLD!!!'; [/exec] для проверки работоспосбности и выводит точно такой же текст в посте. Визуальный редактор отключен, работаю через вкладку "Текст".
    Подскажите в чём проблема.

    Ответить6 дней назад #

Здравствуйте, !

Ваш комментарий