| | |
| | | <?php |
| | | namespace JVBase\blocks; |
| | | |
| | | use JVBase\blocks\CustomBlocks; |
| | | use JVBase\managers\SEO\render\Thing\CreativeWork\MediaObject\VideoObject; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | | } |
| | |
| | | //Get date of current post |
| | | global $post; |
| | | $date = date('c',strtotime($post->post_date)); |
| | | $title = $attributes['title'] ?? $post->post_title; |
| | | $description = $attributes['description'] ?? $post->post_excerpt; |
| | | $title = "Legacy Tattoo Removal"; |
| | | $description="A video of Madi Rawson performing laser tattoo removal treatments."; |
| | | |
| | | // If no video sources, return empty |
| | | if (empty($video_sources)) { |
| | | return ''; |
| | | } |
| | | |
| | | $video_id = $video_sources[0]['id'] ?? 0; |
| | | $video_post = $video_id ? get_post($video_id) : null; |
| | | $title = $video_post->post_title ?? $post->post_title; |
| | | $description = $video_post->post_content ?? $post->post_excerpt; |
| | | |
| | | |
| | | |
| | | // Get poster URL |
| | |
| | | // Build video tag |
| | | $classes = trim("video-cover {$fade_class} {$css_class}"); |
| | | |
| | | $html = '<section class="'.esc_attr($classes).'"> |
| | | <script type="application/ld+json"> |
| | | { |
| | | "@context": "https://schema.org/", |
| | | "@type": "VideoObject", |
| | | "name": "'.$title.'", |
| | | "thumbnailUrl": "'.$poster_url.'", |
| | | "contentUrl": "'.$video_sources[0]['url'].'", |
| | | "description": "'.$description.'", |
| | | "uploadDate": "'.$date.'" |
| | | } |
| | | </script> |
| | | <div class="wrap abs edges"> |
| | | <div class="video-container">'; |
| | | $html .= '<video'; |
| | | $html .= ' muted loop playsinline autoplay'; |
| | | $video = new VideoObject(); |
| | | $video->setName($title); |
| | | $video->setThumbnailUrl($poster_url); |
| | | $video->setContentUrl($video_sources[0]['url']); |
| | | $video->setDescription($description); |
| | | $video->setUploadDate($date); |
| | | |
| | | if ($poster_url) { |
| | | $html .= ' poster="' . esc_url($poster_url) . '"'; |
| | | } |
| | | $html = sprintf( |
| | | '<section class="%s"> |
| | | <script type="application/ld+json">%s</script> |
| | | <div class="wrap abs edges"> |
| | | <div class="video-container">', |
| | | esc_attr($classes), |
| | | json_encode($video->outputSchema()) |
| | | ); |
| | | |
| | | $poster = $poster_url ? sprintf( |
| | | ' poster="%s"', |
| | | esc_url($poster_url) |
| | | ) : ''; |
| | | |
| | | $html .= sprintf( |
| | | '<video muted loop playsinline autoplay%s fetch-priority="high">', |
| | | $poster |
| | | ); |
| | | |
| | | |
| | | $html .= ' fetch-priority="high">'; |
| | | |
| | | // Add mobile sources first (lower resolution) |
| | | foreach ($mobile_sources as $source) { |
| | | if (!empty($source['url']) && !empty($source['mime'])) { |
| | | $html .= '<source'; |
| | | $html .= ' data-src="' . esc_url($source['url']) . '"'; |
| | | $html .= ' type="' . esc_attr($source['mime']) . '"'; |
| | | $html .= ' media="(max-width: 767px)"'; |
| | | $html .= '>'; |
| | | } |
| | | } |
| | | |
| | | // Add desktop sources |
| | | foreach ($video_sources as $source) { |
| | | if (!empty($source['url']) && !empty($source['mime'])) { |
| | | $html .= '<source'; |
| | | $html .= ' data-src="' . esc_url($source['url']) . '"'; |
| | | $html .= ' type="' . esc_attr($source['mime']) . '"'; |
| | | |
| | | // Add media query for desktop if mobile sources exist |
| | | if (!empty($mobile_sources)) { |
| | | $html .= ' media="(min-width: 768px)"'; |
| | | } |
| | | |
| | | $html .= '>'; |
| | | $html .= sprintf( |
| | | '<source data-src="%s" type="%s">', |
| | | esc_url($source['url']), |
| | | esc_attr($source['mime']) |
| | | ); |
| | | } |
| | | } |
| | | |
| | | $html .= '</video>'; |
| | | |
| | | $inner_content = $this->extractInnerContent($content); |
| | | $html .= '</div></div><div class="inner-wrap">'.$inner_content.'</div></section>'; |
| | | $html .= sprintf( |
| | | '</div></div><div class="inner-wrap">%s</div></section>', |
| | | $inner_content |
| | | ); |
| | | |
| | | return $html; |
| | | } |