Как выполнить произвольный php-код в посте без плагинов

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

Откройте файл functions.php и добавьте в него несколько строк:

function run_php($matches){
		eval('ob_start();'.$matches[1].'$inline_execute_output = ob_get_contents();ob_end_clean();');
		return $inline_execute_output;
	}
function run_php($content){
	$content = preg_replace_callback('/[run]((.|n)*?)[/run]/', 'exec_php', $content);
	$content = preg_replace('/[run off]((.|n)*?)[/run]/', '$1', $content);
	return $content;
}
add_filter('the_content', 'run_php', 0);

Этот шорткод имеет конструкцию:

[run]тут исполняемый php-код[/run]

Все, что находится внутри шорткода, считается исполняемым php-кодом. Довольно удобно!
Если вы не хотите, чтобы php-код выполнялся, то можете использовать такую конструкцию:

[run off]тут исполняемый php-код[/run]

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

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

5 Комментарии

  1. Эх, блин, а я использовал кучу плагинов, что б это сделать. Пойду переделывать, то что было на этот способ.

    Вопрос: а шорт-код можно применять в шаблоне, или только в тексте поста?

  2. WordPress ругается:

    function run_php($matches){ eval('ob_start();'.$matches[1].'$inline_execute_output = ob_get_contents();ob_end_clean();'); return $inline_execute_output; } function run_php($content){ $content = preg_replace_callback('/\[run\]((.|\n)*?)\[\/run\]/', 'exec_php', $content); $content = preg_replace('/\[run off\]((.|\n)*?)\[\/run\]/', '$1', $content); return $content; } add_filter('the_content', 'run_php', 0);
    Don't let this happen again. Go Back.

    Придётся пока плагин расчехлять.

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*