是否可以将YouTube API脚本入队,或者它必须是内联的?

时间:2013-04-08 作者:byronyasgur

下面的代码是my functions中函数的主要部分。返回divscript 最终将youtube API iframe输出到调用代码的模板。目前情况良好;然而,我希望将javascript排队,或者至少将其从PHP代码中移出。我厌倦了将其移动到我的主JavaScript文件(在页脚中排队),但当我将其移动到那里时,它不起作用。Edit: 我对VAR进行了硬编码,以避免使用wp_localize_script 以使其脱离画面。

当然有更好的方法(或WordPress方法)来做到这一点吗?

$return = \'

    <div id="\' . $postid . \'player"></div>

    <script> var tag = document.createElement("script"); tag.src = "http://www.youtube.com/player_api";
    var firstScriptTag = document.getElementsByTagName("script")[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    var player;
    function onYouTubePlayerAPIReady() {
        player = new YT.Player("\'. $postid .\'player", {
            height: "315",
            width: "560",
            videoId: "\'. $videoID .\'",
        });
    }
    </script>

    \';

return $return;

1 个回复
最合适的回答,由SO网友:jgraup 整理而成

首先,确保YT apienqueued() 并添加到页脚。

function wp_enqueue_scripts__youtube_api() {
    wp_enqueue_script( \'yt-player-api\', \'http://www.youtube.com/player_api\', array(), false, true );
}

add_action( \'wp_enqueue_scripts\', \'wp_enqueue_scripts__youtube_api\' );
接下来,将div输出到页面上的某个位置。

<div id="\' . $postid . \'player"></div>
然后,钩住wp_footer 确保您将优先级设置为高于20. 到那时,脚本应该呈现在页面上,您可以使用wp_script_is().

function wp_footer__youtube_api() {
    if ( wp_script_is( \'yt-player-api\', \'done\' ) ) {
        $postid  = 123;
        $videoID = 123;
        ?>
        <script id="yt-player-api-ready" type="text/javascript">
            var player;
            function onYouTubePlayerAPIReady() {
                player = new YT.Player("<?php echo $postid; ?>player", {
                    height: "315",
                    width: "560",
                    videoId: "<?php echo $videoID ?>"
                });
            }
        </script>
        <?php
    }
}

add_action( \'wp_footer\', \'wp_footer__youtube_api\', 20 );

结束

相关推荐

通过模板函数嵌入YouTube视频会引发iFrame跨域策略错误

我正在使用Wordpress 3.5,它本机支持嵌入许多网站的帖子和页面,包括YouTube。当我将Youtube视频直接嵌入帖子或页面时(只需复制和粘贴视频url),效果很好,Chrome或Firefox中不会出现跨域策略错误。然而,当我从自定义页面模板(在主循环之外)中的函数添加URL时,它抛出了一个错误,该模板是我为自定义帖子类型构建的。Here is what my function looks like:function my_tour_video() { global