Выполнение коротких кодов WordPress в строке


У меня есть строка, которая может содержать короткие коды, такие как "это строка с [anyshortcode1], а это [anyshortcode2]". Я хочу отобразить строку с короткими кодами, работающими там, где они размещены. Когда я повторяю эту строку, она не использует короткие коды, она просто выводит их, оставляя в скобках. Я попытался исправить это с помощью кода, подобного следующему:

$string_with_shortcodes = "this is a string with [anyshortcode1] and this is [anyshortcode2]";
$pattern = get_shortcode_regex();
preg_match_all("/$pattern/",$string_with_shortcodes, $matches);
foreach ($matches[0] as $short) {
    $string_with_shortcodes = str_replace($short, 'do_shortcode("' . $short . '")', $string_with_shortcodes);
}
eval("\$string_with_shortcodes = \"$string_with_shortcodes\";");
echo $string_with_shortcodes;

Это успешно выполняет замену строки, но вызывает ошибку с функцией eval:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная строка T_STRING

Я неправильно использую функцию eval? Или есть более простой способ выполнить выполнение коротких кодов из строки?

Author: tcox, 2013-12-18

2 answers

Чтобы выполнить shortcode из строки, вы должны использовать функцию do_shortcode().

Вот как его использовать:

$string_with_shortcodes = "this is a string with [anyshortcode1] and this is [anyshortcode2]";
echo do_shortcode($string_with_shortcodes);

Если это не работает, значит, что-то не так с вашей установкой.

Также обратите внимание, что eval() не лучшая команда в вашем коде..!:)

Наконец, убедитесь, что шорткод все еще существует. Существует множество тем, которые используют короткие коды для оформления контента, а затем, когда пользователь устанавливает другую тему, предыдущая короткие коды больше не работают, потому что они будут удалены вместе с предыдущей темой.

 9
Author: Merianos Nikos, 2016-10-28 12:05:51
$string_with_shortcodes = str_replace($short, do_shortcode($short), $string_with_shortcodes);

Я не уверен, что вы пытаетесь сделать с Eval.

 2
Author: Lucky Soni, 2013-12-18 13:45:19