@Kypidon4ik
Фрилансер, Wordpress developer

Является ли замена iframe ютуб ролика на lite-youtube таким кодом оптимальной?

Добрый день! Имеется сайт с высокой посещаемостью на Wordpress, на нем есть блоки с iframe вставкой из ютуб в следствии чего base.js подтягивается очень долго (если на десктопах это еще не так заметно, то на моб девайсах это очень сильно садит производительность)
Нашел решение в интернете через lite-youtube Поясняющий ролик по lite youtube
Далее через str_replace и preg_match хочу проходится по сайту и изменять старый iframe на новый
spoiler
Код замены
function replace_video_shortcode($content) {
    // Паттерн для проверки наличия кода iframe
    $pattern = '/<iframe.*src=\"https:\/\/www\.youtube\.com\/embed\/([^\"]+)\".*<\/iframe>/';
    
    // Ищем совпадения с паттерном в тексте контента
    preg_match_all($pattern, $content, $matches);

    // Если найдены совпадения
    if ($matches) {
        // Проходим по каждому совпадению
        foreach ($matches[0] as $match) {
            // Извлекаем id видео из совпадения
            preg_match($pattern, $match, $video_id);
            
            // Генерируем новый код для замены
            $replacement = '<lite-youtube videoid="' . $video_id[1] . '" params="controls=1"></lite-youtube>';
            
            // Заменяем найденный код на новый код
            $content = str_replace($match, $replacement, $content);
        }
    }
    
    return $content;
}
add_filter('the_content', 'replace_video_shortcode');

Является ли это разумным и оптимизированным решением ?
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
Цикл можно оптимизировать:
foreach($matches[1] as $index => $video_id) {
    $replacement = '<lite-youtube videoid="' . $video_id . '" params="controls=1"></lite-youtube>';
    $content = str_replace($matches[0][$index], $replacement, $content);
}

А существует ли вообще matches?
if(!empty($matches[0]))
Если src не идет первым во фрейме, то Ваша регулярка не сработает, можно сделать так:
'/<iframe[^>]*src=\"https:\/\/www\.youtube\.com\/embed\/([^\?"]+)(\?[^\"]*)?\"[^>]*><\/iframe>/';
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vinyardrip
@vinyardrip
Возможно я не верно понял, что требуется, но как я понимаю, то есть решение без библиотек. Посмотри, может это оно, от вадика макеева ссыль
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы