WordPress自动嵌入YouTube视频-添加过滤器以处理“结束”属性


WordPress auto embed of YouTube videos - adding filter to handle `end` attribute

WordPress自动将页面/帖子内容中的YouTube URL转换为嵌入式iframe视频。

它尊重YouTube URL中的start参数(如果存在),但不尊重end参数(如果出现)。

因此,我需要找到处理这种自动YouTube嵌入功能的WordPress代码,这样我就可以(使用这个解决方案)挂接我自己的过滤器,以满足end的要求。

我搜索了/wp-includes/目录的class-wp-embed.phpclass-oembed.phpmedia.php文件,在后者中,我认为我已经找到了所需的代码。。。

apply_filters( 'wp_embed_handler_youtube', $embed, $attr, $url, $rawattr )

但这个过滤器似乎没有被调用。

有人能给我指正确的方向吗?

我遇到了同样的问题,但没有找到答案。所以这里有一个可行的解决方案:

add_filter('embed_oembed_html', 'my_theme_embed_handler_oembed_youtube', 10, 4);
function my_theme_embed_handler_oembed_youtube($html, $url, $attr, $post_ID) {
    if (strpos($url, 'youtube.com')!==false) {
        /*  YOU CAN CHANGE RESULT HTML CODE HERE */
        $html = '<div class="youtube-wrap">'.$html.'</div>';
    }
    return $html;
}

您可以自定义youtube url并设置各种条件。我过去也实施过。您可以从以下代码中获得一些参考:

 if(strpos($url, "youtube")!==false)
  {
    if(strpos($url, "<object")===false)
    {
     if(strpos($url, "<iframe")===false)
     {
      if(strpos($url, "//youtu.be/")===false)
      {
       $url_string = parse_url($url, PHP_URL_QUERY);
       parse_str($url_string, $args);
       $videoId = isset($args['v']) ? $args['v'] : false;
      }
      else
      {
       $url_string = explode('/',$url);
       $videoId = $url_string[3];
      }
     }
     else
     {
      $pattern = '!//(?:www.)?youtube.com/embed/([A-Za-z0-9'-_]+)!i';
      $result = preg_match($pattern, $url, $matches);   
      $videoId = $matches[1];         
     }
    }
    else
    {
      preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9'-_]+).+?</object>#s', $url, $matches);
      $videoId = $matches[1];
    }
    $urlfrom = 'youtube';
    $video_thumb= '';
}