Правильный способ заменить строку обратным вызовом - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над реализацией CMS и хочу включить функциональность, аналогичную тому, как при использовании word press используются короткие коды, но у меня возникают проблемы с заменой "shortcode" на функцию обратного вызова.

I'mиспользуя приведенное ниже регулярное выражение, чтобы найти все «шорткоды» в коде, и это работает, я просто не могу понять, как можно заменить его обратными вызовами функций.

Regex: / [([^]] *)] /

То, что у меня есть (не работает)

function runShortcodes($input){
        return preg_replace_callback(
            '/\[([^\]]*)\]/', function ($matches)
                {
                $function = $matches[1];
                ob_start();
                $function();
                $return = ob_get_contents();
                ob_end_clean();
                return $return;
                }, $input
        );
    }
function event(){
        return 'it worked';
    }
echo runShortcodes('test [event]');

Сейчас я просто пытаюсь заменить [событие] возвращаемыми данными функции события.

1 Ответ

1 голос
/ 29 сентября 2019

Поскольку вы используете буферизацию вывода для захвата значения из функции короткого кода, вам нужно будет на самом деле что-то вывести из функции event() ...

function event(){
    return 'it worked';
}

просто передает значение обратно,попробуйте ...

function event(){
    echo 'it worked';
}

Или удалите буферизацию вывода и просто верните значение из короткого кода ...

function runShortcodes($input){
    return preg_replace_callback(
        '/\[([^\]]*)\]/', function ($matches)
        {
            $function = $matches[1];
            return $function();
    }, $input
    );
}
function event(){
    return 'it worked';
}
echo runShortcodes('test [event]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...