__('在侧栏嵌入视频播放器。', 'aksrt')] ); } public function widget($args, $instance): void { $title = !empty($instance['title']) ? $instance['title'] : ''; $video_url = !empty($instance['video_url']) ? $instance['video_url'] : ''; $poster = !empty($instance['poster']) ? $instance['poster'] : ''; $autoplay = !empty($instance['autoplay']); $aspect_ratio = !empty($instance['aspect_ratio']) ? $instance['aspect_ratio'] : '16:9'; if (empty($video_url)) return; // 解析视频类型 $embed_url = $this->get_embed_url($video_url); $is_embed = !empty($embed_url); echo $args['before_widget']; if ($title) { echo $args['before_title'] . esc_html($title) . $args['after_title']; } // 计算 padding-bottom $ratio_parts = explode(':', $aspect_ratio); if (count($ratio_parts) === 2 && (int) $ratio_parts[1] > 0) { $padding = ((int) $ratio_parts[1] / (int) $ratio_parts[0]) * 100; } else { $padding = 56.25; // 16:9 } echo '
'; echo $args['after_widget']; } /** * 解析 YouTube / Bilibili 链接为嵌入 URL */ private function get_embed_url(string $url): string { // YouTube if (preg_match('/(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]+)/', $url, $m)) { return 'https://www.youtube.com/embed/' . $m[1]; } // Bilibili if (preg_match('/bilibili\.com\/video\/(BV[a-zA-Z0-9]+)/', $url, $m)) { return 'https://player.bilibili.com/player.html?bvid=' . $m[1] . '&high_quality=1'; } // 腾讯视频 if (preg_match('/v\.qq\.com\/x\/page\/([a-zA-Z0-9]+)/', $url, $m)) { return 'https://v.qq.com/txp/iframe/player.html?vid=' . $m[1]; } return ''; } public function form($instance): void { $title = !empty($instance['title']) ? $instance['title'] : ''; $video_url = !empty($instance['video_url']) ? $instance['video_url'] : ''; $poster = !empty($instance['poster']) ? $instance['poster'] : ''; $autoplay = !empty($instance['autoplay']); $aspect_ratio = !empty($instance['aspect_ratio']) ? $instance['aspect_ratio'] : '16:9'; ?>