preg_replace, BBCODE и новая строка
Я использую метод замены, чтобы сделать [product]ID|text[/product], и он прекрасно работает, пока я не попытаюсь создать новую строку в текстовой части. Тогда это просто ломается и не заменяет вообще.
Функция: функция productBox($match) {
global $wpdb;
$test = explode("|",$matches[1]);
$loopProductID = $test[0];
$desc = $test[1];
//Variabels to get different info (out commented to save space)
$productHTML = '<div class="flow-item">
<div class="flow-product-image"><a href="'.$permalink.'" target="_blank"><img src="'.$thumburl.'" alt="'.$title.'" /></a></div>
<div class="flow-product-info">
<h3><a href="'.$permalink.'" target="_blank">'.$title.'</a> '.$argang.'</h3>
<div style="padding: 5px 0px 10px;">'.$desc.'</div>
<div class="flow-product-facts">Art.nr: '.$artnr.' - Pris: '.$prisinklmoms.' kr</div>
</div>
<div class="clear"></div>
</div>';
return $productHTML;
}
И вот как я называю функцию:
$content = get_the_content();
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$pattern = "/\[product\](.+?)\[\/product\]/";
$content = preg_replace_callback($pattern, 'productBox', $content);
Кто-нибудь, кто мог бы помочь мне здесь, как заставить это работать с новыми строками в текстовой части? Еще приятнее было бы переделать его, чтобы он работал примерно так и, возможно, проще?: [product id="ID"] Текст и другие тексты [/ product]
1 ответ
Решение
Просто добавьте многострочный модификатор:
$pattern = "/\[product\](.+?)\[\/product\]/s";
// here __^