devbanana
En WordPress, estoy tratando de incrustar un video de YouTube, luego incluyo enlaces que saltan a momentos específicos en ese video. Entonces, si quiero saltar a las 2:00, puedo crear un enlace que salte a ese punto en el video incrustado.
Encontré una pregunta similar de hace unos años, pero creo que la API de YouTube ha cambiado. No puedo encontrar ningún complemento que pueda hacer esto, así que quiero hacerlo por mi cuenta si es posible.
¿Sugerencias?
Editar: Aquí está el código que he encontrado hasta ahora. Sin embargo, el único problema es que si el video aún no se ha reproducido, entonces seekTo parece tomar mucho tiempo. No estoy seguro de si debo responder al evento onReady u otro.
add_action( 'wp_enqueue_scripts', 'register_yt_frameapi' );
function register_yt_frameapi() {
wp_register_script( 'frameapi', 'https://www.youtube.com/iframe_api', array(), '1.0.0', true );
}
add_shortcode('ytlink', 'ytlink');
function ytlink($atts, $content = null)
{
wp_enqueue_script('frameapi');
$id = $atts['id'];
$time = $atts['time'];
$timeParts = explode(':', $time);
$seconds = 0;
for ($i = 0; count($timeParts); $i++)
{
$seconds += array_pop($timeParts) * 60 * $i;
}
return '<a href="https://stackoverflow.com/questions/42060604/javascript:void(0);" ' .
'onclick="var player = new YT.Player(\''.$id.'\', {events: {onReady: function () {player.seekTo('.$seconds.', true);}}});">'.
($content ?? $time) . '</a>';
}
Bien, finalmente lo entendí. Publicaré mi solución aquí en caso de que alguien más tenga la misma pregunta. No sé si puede haber una mejor manera de hacer esto, pero esta es la mejor que encontré.
JavaScript:
var player;
var ytSeconds = 0;
jQuery(document).ready(function ()
{
player = new YT.Player('yt-embed', {events: {
'onStateChange': onPlayerStateChange
}
});
});
function onPlayerStateChange(e)
{
if (e.data == 1 && ytSeconds > 0) {
e.target.seekTo(ytSeconds);
ytSeconds = 0;
}
}
function seekTo(seconds)
{
if (player.getPlayerState() == 1) {
player.seekTo(seconds);
}
else {
ytSeconds = seconds;
player.playVideo();
}
}
Entonces los enlaces se ven así:
<a href="#" onclick="seekTo(120);">02:00</a>
-
¿Esto todavía funciona? Instalé el código en mi encabezado pero no tengo éxito cuando ejecuto
seekTo(120)
en la consola– BrettC
30 de diciembre de 2020 a las 2:25
-
Lo mismo aquí, esto no parece funcionar ahora …
– Jos3k4
12 de marzo a las 12:58
Puede usar el código de inserción de esta manera. Usa ?start=100&end=250
<iframe width="560" height="315" src="https://www.youtube.com/embed/N8VCzpXJZvM?start=100&end=250&autoplay=1" frameborder="0" allowfullscreen></iframe>
-
Gracias. Pero eso no es exactamente lo que estoy buscando. Quiero empezar por el principio del vídeo. Pero quiero enlazar a temas específicos a lo largo del video, y cuando se hace clic en el enlace, el video salta a ese punto.
– devbanana
6 de febrero de 2017 a las 5:34
Hay buenos ejemplares.
https://12starsmedia.com/blog/embed-youtube-video-specific-start-time
http://www.youtubestartend.com/
Puede usar ?start= para definir puntos de inicio
-
Lo mismo que arriba. Quiero empezar por el principio. Pero quiero vincular temas específicos a lo largo del video, casi como una tabla de contenido. Verá eso en algunas descripciones de video, donde se vinculan al inicio de cada tema, y luego salta a ese momento.
– devbanana
6 de febrero de 2017 a las 5:36
-
el primer enlace esta muerto
– Zev Averbach
12 de marzo de 2019 a las 15:31
comparte tu fragmento de código
–Ashish Bahl
6 de febrero de 2017 a las 5:06
Agregué una muestra de código de lo que probé.
– devbanana
6 de febrero de 2017 a las 7:01