Перебирать содержимое буфера с другим значением

Нужна помощь,

Я получаю данные буфера, используя плагин и соответствующий тег iframe.

После получения значения буфера я извлекаю iframe src и заменяю их пустым src.

Когда я зацикливаю значения src и вывод, используя preg_replace, он не заменяет значение в соответствии с циклом и заменяет первые значения iframe …

Вот мой код

add_action('wp_footer', 'scheck_iframe_value');

function scheck_iframe_value() {

$get_me_buffers = ob_get_clean();
$pattern = '@(.*)(<iframe(?:.*?)</iframe>)(.*)@m';
ob_start();

/* if (preg_match($pattern, $get_me_buffers, $get_me_buffers_return)) {  */
if (preg_match_all($pattern, $get_me_buffers, $get_me_buffers_return, PREG_PATTERN_ORDER)) {
$d_new_body_plus = $get_me_buffers_return[0];
$html = '';
$sizeofarray = count($d_new_body_plus);
for ($i = 0; $i < count($d_new_body_plus); $i++) {
preg_match('/src="([^"]+)"/', $d_new_body_plus[$i], $match);

$src = $match[1];
$content = str_replace($src, '', $d_new_body_plus[$i]);
$html .= '<div class="wpretarget-iframe-block" style="background-color: lightgray;text-align: center;">'
. '<button style="margin: 5px;background-color: blue;color: white;" type="button" class="wpretarget-iframe-content-button-click" data-url=' . $src . ' data-type="iframe">Click to load content of Vimeo</button>'
. '<span style="display:none;">' . $content . '</span>'
. '</div>';
$d_new_body_plus = $html;
}
echo preg_replace($pattern, $d_new_body_plus, $get_me_buffers);
} else {
echo $get_me_buffers;
}
ob_flush();
}

Снимок экрана 1

Снимок экрана 2

0

Решение

Я решил эту проблему с помощью функции preg_replace_callback. И код

function test_iframe_checker() {
$get_me_buffers = ob_get_clean();
$pattern = '@(.*)(<iframe(?:.*?)</iframe>)(.*)@m';
ob_start();
if (preg_match_all($pattern, $get_me_buffers, $get_me_buffers_return, PREG_PATTERN_ORDER)) {
echo $source = preg_replace_callback($pattern, function($matches){
preg_match('/src="([^"]+)"/', $matches[0], $match);
$src = $match[1];
$contents = str_replace($src, '', $matches[0]);
return $html ='<div class="test-iframe-block" style="background-color: lightgray;text-align: center;">'
. '<button style="margin: 5px;background-color: blue;color: white;" type="button" class="test-iframe-content-button-click" data-url=' . $src . ' data-type="iframe">Click to load content Third Party Control</button>'
. '<span style="display:none;">' . $contents . '</span>'
. '</div>';
}, $get_me_buffers);
} else {
echo $get_me_buffers;
}
ob_flush();
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]