Исполняемый PHP-код в записях WordPress
Иногда может возникнуть необходимость использовать все возможности языка программирования PHP при написании статей. Например, когда нужно сделать что-то уникальное на отдельной странице прямо в контенте записи и вставить PHP-код прямо в редактор.
Однако, по соображениям безопасности, этот метод не рекомендуется использовать. Лучше:
- Использовать шорткоды.
- Или воспользоваться специальным плагином для вставки PHP-кода.
Если вы когда-либо пытались написать PHP-код в записи в надежде, что он будет работать, вы знаете, что WordPress воспринимает этот код как обычный текст. Тем не менее, иногда удобно выполнять, например, цикл вывода прямо в тексте при написании статьи, так как контент такой статьи будет обновляться динамически. Другой пример — возможность вызывать готовые функции в записи, если это необходимо, или вставлять какой-то PHP-файл в текст записи с помощью функции require()
:
require 'my_script.php';
Здесь возможности поистине безграничны, и отсутствие возможности использовать PHP в текстах статей может стать реальной проблемой. Однажды я столкнулся с такой проблемой и решил её, немного изменив код из одного плагина.
Вставка исполняемого PHP-кода в WordPress
Чтобы реализовать возможность вставки исполняемых PHP-скриптов в текст записи или статической страницы, нужно добавить следующий код в знакомый нам файл functions.php
темы:
Код для вставки PHP-кода
if( 'Executable PHP code in post content' ) {
add_filter( 'the_content', 'content_exec_php', 0 );
function content_exec_php( $content ) {
return preg_replace_callback( '/[exec( off)?](.+?)[/exec]/s', '_content_exec_php', $content );
}
function _content_exec_php( $matches ) {
if( ' off' === $matches[1] ) {
return "nn<".'pre>'. htmlspecialchars( $matches[2] ) .'
nn";
} else {
eval( "ob_start(); {$matches[2]}; $exec_php_out = ob_get_clean();" );
return $exec_php_out;
}
}
}
После добавления этого кода в статьях можно использовать следующую конструкцию:
[exec]php код[/exec]
Пример использования
[exec]
// Комментарий
global $wp_version;
echo "Текущая версия WP: $wp_version";
[/exec]
Чтобы отключить выполнение кода, вы можете использовать следующую конструкцию. В этом случае код будет выводиться, как если бы мы вставили его просто как текст.
[exec off]php код[/exec]
Важное замечание о безопасности
Важно помнить, что любой может использовать эту возможность, и это создает серьезную уязвимость безопасности. Если кто-то имеет доступ к написанию статей, он может легко сделать что угодно с сайтом.
Чтобы защитить себя от возможных вредных последствий этого способа, можно реализовать простую защиту. Например, разрешать выполнение конструкции [exec]php код[/exec]
только в случае, если у записи есть какое-то произвольное поле или, скажем, запись создается в 00 минут. Естественно, только вы будете знать этот трюк, под который будет выполняться код, и только вы будете иметь возможность вставлять PHP-код в статью.