Jake Vanderwerf
5 days ago 75a097a018a0090f5902758353c578fce4aa2a25
inc/blocks/VideoCoverBlock.php
@@ -1,7 +1,8 @@
<?php
namespace JVBase\blocks;
use JVBase\blocks\CustomBlocks;
use JVBase\managers\SEO\render\Thing\CreativeWork\MediaObject\VideoObject;
if (!defined('ABSPATH')) {
   exit;
}
@@ -55,15 +56,17 @@
      //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
@@ -72,60 +75,52 @@
      // 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;
   }