'method_name', 'embed_oembed_html' => array( 'function_to_add' => 'get_embed', 'accepted_args' => 4, ), ); } /** * [$regex description] * * @see WP_oEmbed::$providers in wp-includes/class-oembed.php for more regex * * @regex null */ // private $regex = '#https?://(www.)?youtube\.com/(?:v|embed)/([^/]+)#i'; private $regex = '#(?:v=|\/v\/|\.be\/)([a-zA-Z0-9_-]+)#i'; private $minify = null; /** * [__construct description] * * @param Minify $minify Minify object. */ function __construct( Minify $minify ) { $this->minify = $minify; Inline_Style::set( $this->get_css() ); Inline_Script::set( $this->get_js() ); } /** * Get embed * * @todo Problema con gli embed da link di siti WordPress, controllare $matches[1] * Provare con questa url nell'editor https://css-tricks.com/moving-to-https-on-wordpress/ * * @param string $value [description] * @return string [description] */ public function get_embed( $cache, $url, $attr, $post_ID ) { preg_match( $this->regex, $url, $matches ); if ( ! isset( $matches[1] ) ) { return $cache; } $html = sprintf( '
', $matches[1] ); return $html; // return $cache; } /** * Function description * * @param string $value [description] * @return string [description] */ public function get_css() { $css = '.youtube { background-color: #000; margin-bottom: 30px; position: relative; padding-top: 56.25%; overflow: hidden; cursor: pointer; } .youtube img { width: 100%; top: -16.82%; left: 0; opacity: 0.7; } .youtube .play-button { width: 90px; height: 60px; background-color: #333; box-shadow: 0 0 30px rgba( 0,0,0,0.6 ); z-index: 1; opacity: 0.8; border-radius: 6px; } .youtube .play-button:before { content: ""; border-style: solid; border-width: 15px 0 15px 26.0px; border-color: transparent transparent transparent #fff; } .youtube img, .youtube .play-button { cursor: pointer; } .youtube img, .youtube iframe, .youtube .play-button, .youtube .play-button:before { position: absolute; } .youtube .play-button, .youtube .play-button:before { top: 50%; left: 50%; transform: translate3d( -50%, -50%, 0 ); } .youtube iframe { height: 100%; width: 100%; top: 0; left: 0; }'; return $this->minify->run( $css ); } /** * Function description * * @param string $value [description] * @return string [description] */ public function get_js() { $js = '( function() { var youtube = document.querySelectorAll( ".youtube" ); for (var i = 0; i < youtube.length; i++) { var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg"; var image = new Image(); image.src = source; image.addEventListener( "load", function() { youtube[ i ].appendChild( image ); }( i ) ); youtube[i].addEventListener( "click", function() { var iframe = document.createElement( "iframe" ); iframe.setAttribute( "frameborder", "0" ); iframe.setAttribute( "allowfullscreen", "" ); iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1" ); this.innerHTML = ""; this.appendChild( iframe ); } ); }; } )();'; return $this->minify->run( $js ); } }