Вы можете использовать функцию `preg_replace_callback()` для замены шорткодов с помощью регулярных выражений и использования callback функции для получения значений из POST массива.
```php
$text = "Привет [shortcode123], это [shortcode456].";
$result = preg_replace_callback('/\[shortcode(\d+)\]/', function($matches) {
$shortcode = $matches[0];
$index = $matches[1];
// Проверяем, есть ли значение в POST массиве для данного шорткода
if(isset($_POST['shortcode'][$index])) {
return $_POST['shortcode'][$index];
}
// Если значение не найдено, возвращаем сам шорткод без изменений
return $shortcode;
}, $text);
echo $result;
```
В данном примере мы ищем шорткоды с помощью регулярного выражения `/\[shortcode(\d+)\]/`. Здесь `\d+` означает одну или более цифр после слова "shortcode". Когда найден шорткод, мы используем callback функцию для получения значения из POST массива с помощью индекса следующих после слова "shortcode" цифр. Если значение найдено, оно подставляется вместо шорткода, в противном случае оставляется сам шорткод без изменений.
Обратите внимание, что в данном коде мы предполагаем, что значения для шорткодов находятся в POST массиве `$_POST['shortcode']`. Вам может потребоваться изменить это в соответствии с вашими данными.