Интегрируйте этот код регулярного выражения в существующий php-код

Я использую приведенный ниже код для вывода видео для последнего видео:

$args = array( 
 'numberposts' => '1', 
 'tax_query' => array(
 array(
 'taxonomy' => 'post_format',
 'field' => 'slug',
 'terms' => 'post-format-video'
 )
 ),
 'meta_query' => array(
 array(
 'key' => 'dt_video',
 'value' => '',
 'compare' => '!='
 )
 )
);
$latest_video = wp_get_recent_posts($args); // Get latest video in 'video' post format
$latest_video_id = $latest_video['0']['ID']; // Get latest video ID
$video_url = htmlspecialchars(get_post_meta($latest_video_id, 'dt_video', true));
echo '';

URL-адрес выводится точно в HTML, но видео не отображается, и я получаю следующую ошибку в консоли:

Refused to display 'http://www.youtube.com/watch?v=l4X2hQC32NA&feature=g-all-u&context=G258729eFAAAAAAAAHAA?rel=0' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

Посредством некоторых поисков я обнаружил, что это связано с неправильным форматом видео.

URL-адрес указанной выше ошибки должен быть отформатирован следующим образом: www.youtube.com/embed/l4X2hQC32NA?rel=0

Итак, я нашел способ динамически изменить формат с помощью кода ниже:

$text = $post->text;
 $search = '#<a(.*?)(?:href="https?: )?(?:www\.)?(?:youtu\.be="" |youtube\.com(?:="" embed="" |="" v="" watch?.*?v="))([\w\-]{10,12}).*<\/a">#x';
 $replace = '';
 $text = preg_replace($search, $replace, $text);
echo $text;
</a(.*?)(?:href="https?:>

Тем не менее, я не уверен, как я могу реализовать это в исходном коде, чтобы я мог изменить формат выводимого URL. Может ли кто-нибудь показать мне, как я могу это достичь?

1 ответ

Как это:

$video_url = "http://www.youtube.com/watch?v=l4X2hQC32NA&feature=g-all-u&context=G258729eFAAAAAAAAHAA?rel=0";
$search = '#(?:href="https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch?.*?v=))([\w\-]{10,12}).*$#x';
$replace = "http://www.youtube.com/embed/$1";
preg_match_all($search, $video_url, $matches);
$embedded_video_url = preg_replace($search, $replace, $video_url) ;
echo '';

Просто используйте свой собственный $video_url

licensed under cc by-sa 3.0 with attribution.