【问题标题】:WordPress auto embed of YouTube videos - adding filter to handle `end` attributeWordPress 自动嵌入 YouTube 视频 - 添加过滤器来处理“结束”属性
【发布时间】:2016-01-28 05:12:01
【问题描述】:

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

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

因此,我需要找到处理这个自动 YouTube 嵌入功能的 WordPress 代码,这样我就可以挂上我自己的过滤器(using this solution)来处理end 的要求。

我搜索了/wp-includes/ 目录下的class-wp-embed.phpclass-oembed.phpmedia.php 文件,在后者中,我以为我找到了我需要的代码...

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

...但该过滤器似乎没有被调用。

谁能指出我正确的方向?

【问题讨论】:

    标签: php wordpress video youtube embed


    【解决方案1】:

    您可以自定义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= '';
    
    }
    

    【讨论】:

      【解决方案2】:

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

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        相关资源
        最近更新 更多