J'utilise beaucoup de vidéos intégrées (via oembed
) sur mon blog, ce qui peut ralentir le chargement des pages.
Existe-t-il un moyen de remplacer automatiquement les vidéos YouTube (et autres) par une vignette (de préférence l'image sélectionnée du message)? Et puis remplacez la vignette par la vidéo iframe lorsque vous cliquez dessus?
<iframe>
et <img>
, autres oEmbeds.oIncorporer, vignettes et wordpress
https://stackoverflow.com/q/838878/1287812
<?php
/**
* Plugin Name: oEmbed Replace Iframe with AutoPlay-Image
* Plugin URI: https://wordpress.stackexchange.com/q/73996/12615
* Description: Replaces the iFrame embed with the Featured Image
* and if this not exists replaces with the Video Thumbnail
* Version: 1.0
* Author: brasofilo
* Author URI: https://wordpress.stackexchange.com/users/12615/brasofilo
*/
//avoid direct calls to this file
if (!function_exists ('add_action')) {
header('Status: 403 Forbidden');
header('HTTP/1.1 403 Forbidden');
exit();
}
add_filter( 'oembed_dataparse', 'wpse_73996_oembed_click2play', 10, 3 );
function wpse_73996_oembed_click2play( $return, $data, $url )
{
// Create Unique ID, case more than one oembed is used in the page
// https://stackoverflow.com/questions/3656713/
$uuid = gettimeofday();
$uuid = mt_Rand() . $uuid['usec'];
// Use Featured Image, if exists
// This only works visually if 1 oEmbed per post is used
$post_thumbnail_id = get_post_thumbnail_id( $_REQUEST['post'] );
if( $post_thumbnail_id )
{
$thumb = wp_get_attachment_image_src( $post_thumbnail_id, 'medium' );
$image = $thumb[0];
}
if( !$image )
$image = $data->thumbnail_url;
// YouTube
if ( $data->provider_name == 'YouTube' )
{
$autoplay = str_replace('feature=oembed', 'feature=oembed&autoplay=1', $return );
$return = '<script type="text/javascript">var embedCode'
. $uuid . ' = \''
. $autoplay .'\';</script><div id="videocontainer'
. $uuid . '"><img src="'
. $image
. '" onclick="document.getElementById(\'videocontainer'
. $uuid . '\').innerHTML = embedCode'
. $uuid . ';" height="360" width="480" /></div>';
}
// Vimeo
elseif ( $data->provider_name == 'Vimeo' )
{
$autoplay = str_replace('" width=', '?autoplay=1" width=', $return );
$return = '<script type="text/javascript">var embedCode'
. $uuid . ' = \''
. $autoplay . '\';</script><div id="videocontainer'
. $uuid . '"><img src="'
. $image
.'" onclick="document.getElementById(\'videocontainer'
. $uuid . '\').innerHTML = embedCode'
. $uuid . ';" height="360" width="480" /></div>';
}
return $return;
}
$data
renvoyé par les fournisseurs de vidéosstdClass(
type = 'video'
version = 1.0
provider_name = 'Vimeo'
provider_url = 'http://vimeo.com/'
title = 'Earth'
author_name = 'Michael König'
author_url = 'http://vimeo.com/michaelkoenig'
is_plus = 1
html = '<iframe src="http://player.vimeo.com/video/32001208" width="540" height="304" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'
width = 540
height = 304
duration = 300
description = 'lorem ipsum'
thumbnail_url = 'http://b.vimeocdn.com/ts/307/031/307031094_295.jpg'
thumbnail_width = 295
thumbnail_height = 166
video_id = 32001208
)
stdClass(
provider_url = 'http://www.youtube.com/'
thumbnail_url = 'http://i2.ytimg.com/vi/552yWya5RgY/hqdefault.jpg'
title = 'Tu cara me suena - Arturo Valls imita a Rihanna'
html = '<iframe width="540" height="304" src="http://www.youtube.com/embed/552yWya5RgY?fs=1&feature=oembed" frameborder="0" allowfullscreen></iframe>'
author_name = 'antena3'
height = 304
thumbnail_width = 480
width = 540
version = 1.0
author_url = 'http://www.youtube.com/user/antena3'
provider_name = 'YouTube'
type = 'video'
thumbnail_height = 360
)
Voici la version améliorée du plugin brasofilo:
add_filter( 'oembed_dataparse', function($str, $data, $url) {
if ( ($yt = $data->provider_name == 'YouTube') || ($vm = $data->provider_name == 'Vimeo') )
{
if($yt) $html = str_replace('feature=oembed', 'feature=oembed&autoplay=1', $str);
else $html = str_replace('" width=', '?autoplay=1" width=', $str);
$html = htmlentities($html, ENT_QUOTES);
$img = $data->thumbnail_url;
$title = esc_attr($data->title);
return '<img src="'. $img . '" onclick="this.outerHTML=\'' . $html . '\'" title="' . $title . '">';
}
return $str;
}, 10, 3);
Ne pas oublier de nettoyer la mémoire cache d'Oembed! Vous pouvez utiliser cette commande SQL pour le faire:
DELETE FROM wp_postmeta WHERE meta_key LIKE '_oembed%'
Plus d'infos sur https://siteorigin.com/clearing-oembed-cache/
C’est une bonne méthode ... mais une méthode moins compliquée (pour ceux d’entre nous moins expérimentés) consisterait à utiliser ce tutoriel .
Ne branchez pas le code d'intégration YouTube tel que YT (YouTube) vous le donne (vous pouvez essayer, mais ce sera ganky) ... remplacez simplement la source à partir du code d'intégration de votre vidéo UP TO &autoplay=1
(laissez ceci à la fin). tel quel).
par exemple.
Le code d'origine YT donne:
<object width="420" height="315">
<param name="movie" value="//www.youtube.com/v/5mEymdGuEJk?hl=en_US&version=3"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="//www.youtube.com/v/5mEymdGuEJkhl=en_US&version=3" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
Code utilisé dans le tutoriel avec le même YT src:
<object width="420" height="315" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess"value="always" />
<param name="src" value="http://www.youtube.com/v/5mEymdGuEJk?version=3&hl=en_US&autoplay=1" /><param name="allowfullscreen" value="true" />
<embed width="420" height="315" type="application/x-shockwave-flash" src="http://www.youtube.com/v/5mEymdGuEJk?version=3&hl=en_US&autoplay=1" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" />
</object>
Sinon, remplacez simplement la source et le chemin img par le vôtre, et voilà!