Исполнение PHP-кода в записях WordPress: руководство

Исполняемый 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-код в статью.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *