feat(submit): add video cover picker with playable video preview

Featured video preview now renders a real DPlayer (video-url/video-pic)
like the reference theme instead of a static image, so the cover video
plays on the submit page. Top-right bar gains the video-cover button
shown only when a video cover is loaded; backend honors pic_id and no
longer deletes the thumbnail before cover validation. Drop dead i18n
keys and data-can-* attributes.
This commit is contained in:
2026-09-05 23:41:22 +08:00
parent d84d485ec7
commit 51a591e2b9
7 changed files with 188 additions and 35 deletions
+2 -5
View File
@@ -147,9 +147,8 @@ if (file_exists($js)) {
'fileTooLarge' => __('文件大小超过限制', 'aksrt'),
'lastSaved' => __('最后保存:', 'aksrt'),
'preview' => __('预览文章', 'aksrt'),
'pickImage' => __('选择图片', 'aksrt'),
'pickVideo' => __('选择视频封面图', 'aksrt'),
'videoUrl' => __('请输入视频地址', 'aksrt'),
'setVideoCover' => __('设置视频首图封面', 'aksrt'),
'setVideoCoverTitle' => __('为视频设置首图封面', 'aksrt'),
'close' => __('关闭', 'aksrt'),
'insertImage' => __('插入图片', 'aksrt'),
'uploadImage' => __('上传图片', 'aksrt'),
@@ -198,8 +197,6 @@ if (file_exists($js)) {
'maxMediaItems' => __('最多选择 %d 个文件', 'aksrt'),
'uploadingClose' => __('上传中,请稍候再关闭', 'aksrt'),
'mediaPickerUnavailable' => __('媒体选择器加载失败,请刷新页面后重试', 'aksrt'),
'pickVideoResource' => __('选择视频资源', 'aksrt'),
'pickVideoCover' => __('选择视频封面(可选)', 'aksrt'),
'download' => __('下载', 'aksrt'),
'quote' => __('引言', 'aksrt'),
+13 -9
View File
@@ -22,10 +22,7 @@ $can_slide = !empty($ctx['can_cover_slide']);
$can_video = !empty($ctx['can_cover_video']);
?>
<div class="featured-edit<?php echo $type !== '' ? ' featured-loaded ' . esc_attr($type) : ''; ?>"
data-featured-args="<?php echo esc_attr(wp_json_encode($args)); ?>"
data-can-image="<?php echo $can_image ? '1' : '0'; ?>"
data-can-slide="<?php echo $can_slide ? '1' : '0'; ?>"
data-can-video="<?php echo $can_video ? '1' : '0'; ?>">
data-featured-args="<?php echo esc_attr(wp_json_encode($args)); ?>">
<div class="featured-preview" data-featured-preview>
<?php if ($type === 'image' && !empty($data['url'])) : ?>
<img src="<?php echo esc_url((string) $data['url']); ?>" alt="">
@@ -33,11 +30,13 @@ $can_video = !empty($ctx['can_cover_video']);
<img src="<?php echo esc_url((string) $data[0]['url']); ?>" alt="">
<span class="featured-type-badge"><i class="fa fas fa-image"></i></span>
<?php elseif ($type === 'video') : ?>
<?php if (!empty($data['pic'])) : ?>
<img src="<?php echo esc_url((string) $data['pic']); ?>" alt="">
<?php else : ?>
<div class="featured-video-placeholder"><i class="fa fas fa-play"></i></div>
<?php endif; ?>
<div class="new-dplayer dplayer-scale-height" style="--scale-height:50%;"
video-url="<?php echo esc_url((string) ($data['url'] ?? '')); ?>"
video-pic="<?php echo esc_url((string) ($data['pic'] ?? '')); ?>">
<div class="graphic" style="padding-bottom:50%;">
<div class="abs-center text-center"><i class="fa fas fa-play-circle fa-4x muted-3-color opacity5" aria-hidden="true"></i></div>
</div>
</div>
<span class="featured-type-badge"><i class="fa fas fa-video"></i></span>
<?php endif; ?>
</div>
@@ -47,6 +46,11 @@ $can_video = !empty($ctx['can_cover_video']);
<i class="fa fas fa-image"></i> <?php esc_html_e('图片', 'aksrt'); ?>
</button>
<?php endif; ?>
<?php if ($can_video) : ?>
<button type="button" class="but btn-video-pic" data-featured-action="video_pic">
<i class="fa fas fa-image"></i> <?php esc_html_e('设置视频首图封面', 'aksrt'); ?>
</button>
<?php endif; ?>
<?php if ($can_slide) : ?>
<button type="button" class="but btn-slide" data-featured-action="slide">
<i class="fa fas fa-image"></i> <?php esc_html_e('幻灯片', 'aksrt'); ?>