Converta todo o link do youtube para incorporar

Eu tenho essa function para converter qualquer URL do YouTube em qualquer publicação ou página para incorporar: –

function embed_youtube_an($post_content) { global $posts; //preg_match('|http://www.youtube.com/watch?v=([a-zA-Z0-9]+)|', $posts->post_content, $matches); preg_match('#http://w?w?w?.?youtube.com/watch\?v=([A-Za-z0-9\-_]+)#s', $posts->post_content, $matches); if (!empty($matches[1])) { $post_content = ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content = $post_content; } return $post_content; } add_filter('the_content', 'embed_youtube_an'); 

Mas quando aberto, todo o URL do YouTube não é exibido no embed.

Onde está o problema?

Solutions Collecting From Web of "Converta todo o link do youtube para incorporar"

EDITAR

Depois de revisar sua edição, você pode tentar seguir estas instruções

Para incorporar um vídeo ou outro object em uma postagem ou página, coloque seu URL na área de conteúdo. Certifique-se de que o URL esteja na sua própria linha e não seja hiperlink (clicável ao visualizar a publicação).


Parece que você gostaria de usar wp_get_oembed() – Os exemplos se parecem com isto:

Recupere o código embutido para um URL de um provedor suportado:

 < ?php $embed_code = wp_oembed_get('http://www.youtube.com/watch?v=tkEvSjdDfiA'); ?> 

Recupere o código embutido para um URL de um provedor oEmbed suportado – com argumento de largura:

 < ?php $embed_code = wp_oembed_get('http://www.youtube.com/watch?v=tkEvSjdDfiA', array('width'=>400)); ?> 

Se isso não funcionar, você provavelmente poderia aplicar o filtro ‘the_content’ :

 apply_filters( 'the_content', 'http://www.youtube.com/watch?v=tkEvSjdDfiA' ); 

Mas esse filtro provavelmente é exagerado para o que você está tentando alcançar.

Quando você inseriu o URL, coloque seu editor no modo TEXT. Muitas pessoas não percebem que o editor visual converte caracteres especiais HTML e desativa links.

Você está fazendo uso incorreto do filtro the_content .

Por que seu código não está funcionando

  • Você não está devolvendo nada de volta ao conteúdo referenciado

  • Mesmo que sua condição falhe, você deve passar o conteúdo referenciado de volta, caso contrário, nada será exibido se sua condição retornar false

  • Sua function preg_match está usando o subject errado. Use o conteúdo referenciado aqui. (Isso é apenas uma nota, você não precisa chamar a $post global)

  • Seu pattern também está errado, ele não corresponde a nenhum padrão, assim, falhando e retornando o conteúdo como é

Com o código atual que você possui, eu fui com parse_url() e parse_str() graças a essa resposta . Deve-se notar que, a partir da sua pergunta original, você está usando o seguinte formato

  • http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related e
  • http://www.youtube.com/watch?v=C4kxS1ksqtw .

Este código funciona apenas no watch?v= formato watch?v=

Modifiquei seu código de acordo com isso:

 add_filter('the_content', function ($post_content) { parse_str( parse_url( $post_content, PHP_URL_QUERY ), $matches); if (!empty($matches['v'])) { $post_content = ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content .= ''; $post_content = $post_content; } return $post_content; }); 

EDITAR

Como teste, o seguinte código

 < ?php $string = 'http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related'; parse_str( parse_url( $string, PHP_URL_QUERY ), $matches); ?>
< ?php var_dump($matches); ?>

< ?php

dá o seguinte resultado quando despejado

 array(2) { ["v"]=> string(11) "C4kxS1ksqtw" ["feature"]=> string(7) "related" }