Я определяю функцию, которая может обрабатывать шорткоды для пользователей с сообщениями, сделанными wisiwyg.
Использование функции на основе preg_replace_callback прекрасно работает, но возвращенные замененные значения печатаются перед исходной строкой
Это функция обработчика
function shortcodify($string){
return preg_replace_callback('#\[\[(.*?)\]\]#', function($matches){
$parts = explode(':',$matches[1]);
$fnName = array_shift($parts);
if(function_exists($fnName)){
return call_user_func_array($fnName,$parts);
} else {
return $matches[0];
}
},$string);
}
Это функция, которая заменит шорткод
function slider($tag){
//search $tag in DB
echo '<div>...'.$sliderContentFromDB.'...</div>';
}
Использование:
$postContent = "<h1>Super Slider</h1> [[slider:super-slider]] <p>Slider Description</p>";
shortcodify($postContent);
Ожидаемый результат:
<h1>Super Slider</h1>
<div>...super slider content...</div>
<p>Slider Description</p>
Фактический результат:
<div>...super slider content...</div>
<h1>Super Slider</h1>
<p>Slider Description</p>
Что я могу сделать не так?