【问题标题】:Use wordpress built in mediaelement.js to embed brandless youtube videos using a function使用 mediaelement.js 中内置的 wordpress 使用函数嵌入无品牌的 youtube 视频
【发布时间】:2014-10-27 10:50:45
【问题描述】:

我正在尝试找到一个使用 mediaelement.js 播放器来嵌入相对无品牌的 youtube 视频的功能。

由于 mediaelement.js 是内置在 Wordpress 中的,我当然可以用 chromeless mediaelement api 嵌入代码替换从 oembed 返回的 youtube 品牌 iframe 嵌入代码。

我的网站上有 2000 个视频,但遗憾的是,我无法查看每个视频来更改 youtube 嵌入。这必须通过一个函数来实现!

在我的测试中,mediaelement api 似乎在 ipad 上很烂,所以我使用了 if 语句来排除 ios 设备。使用一点 Jquery,这段代码在 wordpress php 文件中运行良好。

<?php
if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod') || strstr($_SERVER['HTTP_USER_AGENT'],'iPad')) 
{
echo '<iframe width="560" height="315" src="//www.youtube.com/embed/TKgDzpc3lZ8?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>';
}
else
{
echo '<video controls="controls" id="youtube1">
<source type="video/youtube" src="//www.youtube.com/embed/TKgDzpc3lZ8"/>
</video>';
}
?>

因此,现在的目标是使用函数执行此操作,并在将 youtube 嵌入发送到浏览器之前将其替换为 str_replace。这是我到目前为止所拥有的,我很清楚我的体重超过了我的体重:

function youtubeme($youtubeme) {
if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod') || strstr($_SERVER['HTTP_USER_AGENT'],'iPad')) 
{

}
else
{
 return (str_replace('<iframe width="750" height="422"', '<video controls="controls" id="youtube1"><source type="video/youtube" ', $youtubeme));
 return (str_replace('?feature=oembed&amp;autoplay=1" frameborder="0" allowfullscreen=""></iframe>', '"/></video>', $youtubeme));

}}

add_action('wp_embed', 'youtubeme');

任何帮助都将不胜感激,因为我仍在学习,到目前为止已经经历了几个小时的痛苦。

//////编辑//////

这是我使用的 Jquery。

jQuery(document).ready(function($) {
   $('#youtube1').mediaelementplayer({
   alwaysShowControls: true,
   // force iPad's native controls
   iPadUseNativeControls: true,
   // force iPhone's native controls
   iPhoneUseNativeControls: true, 
   // force Android's native controls
   AndroidUseNativeControls: true,
})});

【问题讨论】:

  • 以防万一有人来到这里。使用其中一些技术,我确实得到了我的无品牌播放器,但我最终使用了 JW 播放器,因为 mediaelementplayer 使用起来相当棘手

标签: php wordpress mediaelement.js oembed


【解决方案1】:

您非常接近,基本上只是缺少正确的过滤器挂钩。请注意:

  • $html 参数是&lt;iframe... HTML。

  • $url 包含正在解析的 URL(youtu.be/...youtube.com/...)。

  • $attr 是具有heightwidth 的对象。

  • $html 字符串替换应该被优化以适用于任何width/height;在此示例中,我使用的是由一个主题生成的值,但它因一个主题而异。

  • &lt;video id="ID"&gt; 应进行优化以适用于任意数量的嵌入。

  • play 图标显示两个版本:YouTube 和 MediaElement 的

  • 我没有设法用$('#youtube1').mediaelementplayer() 实例化 MediaElement,而是使用了new MediaElementPlayer("#youtube1")

add_filter( 'embed_oembed_html', 'oembed_so_26585894', 10, 4 );

function oembed_so_26585894( $html, $url, $attr, $post_ID )
{
    $provider = parse_url( $url ); 

    if( !in_array( $provider['host'], array('youtu.be','youtube.com') ) )
        return $html;

    if(
        strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') 
        || strstr($_SERVER['HTTP_USER_AGENT'],'iPod') 
        || strstr($_SERVER['HTTP_USER_AGENT'],'iPad')
    )
        return $html;

    $html = str_replace( '<iframe width="584" height="438"', '<video controls="controls" id="youtube1"><source type="video/youtube" width="640" height="360" ', $html );
    $html = str_replace( '?feature=oembed" frameborder="0" allowfullscreen></iframe>', '"/></video>', $html );
    $html .= '<script>jQuery(document).ready(function($) { var player = new MediaElementPlayer("#youtube1"); });</script>';
    return $html;
}

以及以下将所需的脚本/样式表排入队列:

add_action( 'wp_enqueue_scripts', function(){
    wp_enqueue_style( 'wp-mediaelement' );
    wp_enqueue_script( 'wp-mediaelement', false, array('jquery'), false, true );
});

【讨论】:

  • 好悲痛。太感谢了。与这头野兽搏斗已经很长时间了。我很惊讶这还没有被嵌入到一个简单的样式插件中。不过有一个问题,我的系统似乎不喜欢队列中的 function() ?它给出了一个致命错误,意外的功能
  • 哦,你的PHP版本太低了,我觉得这种匿名函数是5.2+(具体记不太清了)...就用add_action('action_name', 'function_name' ); function function_name() { /* etc */ }
  • 是的,喜欢 YT 视频的白色品牌技术,非常酷 :)
  • 太棒了。再次感谢 :) 为什么 YouTube 觉得有必要让我们跳过所有这些障碍,这超出了我的理解
  • 在我的函数文件中添加了这两个函数,但不起作用。你能帮我详细介绍一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2018-07-30
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
相关资源
最近更新 更多