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(']]>', ']]&gt;', $content);
$pattern = "/\[product\](.+?)\[\/product\]/";
$content = preg_replace_callback($pattern, 'productBox', $content);

Кто-нибудь, кто мог бы помочь мне здесь, как заставить это работать с новыми строками в текстовой части? Еще приятнее было бы переделать его, чтобы он работал примерно так и, возможно, проще?: [product id="ID"] Текст и другие тексты [/ product]

1 ответ

Решение

Просто добавьте многострочный модификатор:

$pattern = "/\[product\](.+?)\[\/product\]/s";
//                                  here __^
Другие вопросы по тегам