Replace the video-pic/video/clear button labels with icon-only buttons carrying title + aria-label (设置视频封面/视频/清除), center the glyphs via flex to fix the upward icon shift, rename the media picker title to 为视频设置封面, and drop the unused setVideoCover i18n key. Contract test updated to pin the new markup and string set.
278 lines
11 KiB
PHP
278 lines
11 KiB
PHP
<?php
|
||
/**
|
||
* Template Name: AKSRT - 写文章/投稿
|
||
* Template Post Type: page
|
||
*
|
||
* Front-end article submission page matching the reference newposts layout.
|
||
* 注意:page-newposts.php 是「最新文章」列表,不是投稿。
|
||
*
|
||
* @package AKSRT
|
||
*/
|
||
|
||
defined('ABSPATH') || exit;
|
||
|
||
$ctx = include get_template_directory() . '/templates/parts/submit/context.php';
|
||
if (!is_array($ctx)) {
|
||
$ctx = [];
|
||
}
|
||
|
||
// Feature disabled → soft 404.
|
||
if (empty($ctx['enabled'])) {
|
||
global $wp_query;
|
||
$wp_query->set_404();
|
||
status_header(404);
|
||
nocache_headers();
|
||
include get_query_template('404');
|
||
return;
|
||
}
|
||
|
||
// Guest without guest mode → login.
|
||
if (!empty($ctx['is_guest']) && empty($ctx['settings']['guest_enabled'])) {
|
||
$login = function_exists('aksrt_get_login_url') ? aksrt_get_login_url(get_permalink()) : wp_login_url(get_permalink());
|
||
wp_safe_redirect($login);
|
||
exit;
|
||
}
|
||
|
||
// Invalid edit id → strip.
|
||
if (!empty($_GET['edit']) && empty($ctx['edit_post'])) {
|
||
wp_safe_redirect(remove_query_arg('edit'));
|
||
exit;
|
||
}
|
||
|
||
// wp_editor() is rendered after get_header(); queue its runtime before wp_head.
|
||
wp_enqueue_editor();
|
||
|
||
// Assets.
|
||
$css = get_template_directory() . '/assets/css/frontend/pages/submit.css';
|
||
if (file_exists($css)) {
|
||
wp_enqueue_style(
|
||
'aksrt-submit',
|
||
get_template_directory_uri() . '/assets/css/frontend/pages/submit.css',
|
||
['aksrt-public'],
|
||
(string) filemtime($css)
|
||
);
|
||
}
|
||
$js = get_template_directory() . '/assets/js/front-submit.js';
|
||
$editor_js = get_template_directory() . '/assets/js/front-submit-editor.js';
|
||
if (file_exists($editor_js)) {
|
||
wp_enqueue_script(
|
||
'aksrt-front-submit-editor',
|
||
get_template_directory_uri() . '/assets/js/front-submit-editor.js',
|
||
['editor'],
|
||
(string) filemtime($editor_js),
|
||
true
|
||
);
|
||
}
|
||
$pay_download_js = get_template_directory() . '/assets/js/front-submit-pay-download.js';
|
||
if (file_exists($pay_download_js)) {
|
||
wp_enqueue_script(
|
||
'aksrt-front-submit-pay-download',
|
||
get_template_directory_uri() . '/assets/js/front-submit-pay-download.js',
|
||
['aksrt-front-submit-editor'],
|
||
(string) filemtime($pay_download_js),
|
||
true
|
||
);
|
||
}
|
||
if (file_exists($js)) {
|
||
wp_enqueue_script(
|
||
'aksrt-front-submit',
|
||
get_template_directory_uri() . '/assets/js/front-submit.js',
|
||
['loader_js', 'aksrt-front-submit-editor', 'aksrt-front-submit-pay-download'],
|
||
(string) filemtime($js),
|
||
true
|
||
);
|
||
$submit_image_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('image');
|
||
$submit_video_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('video');
|
||
$resource_max_size = \AKSRT\Core\FrontSubmit::upload_limit_bytes('resource');
|
||
|
||
wp_localize_script('aksrt-front-submit-editor', 'aksrtSubmitData', [
|
||
'ajaxUrl' => admin_url('admin-ajax.php'),
|
||
'nonce' => wp_create_nonce('aksrt_submit'),
|
||
'restUrl' => esc_url_raw(rest_url('aksrt/v1')),
|
||
'restNonce' => wp_create_nonce('wp_rest'),
|
||
'postId' => (int) ($ctx['edit_id'] ?? 0),
|
||
|
||
'mediaUrl' => esc_url_raw(rest_url('aksrt/v1/front-submit/media')),
|
||
'media' => [
|
||
'image' => ['url' => esc_url_raw(rest_url('aksrt/v1/front-submit/media/image'))],
|
||
'video' => ['url' => esc_url_raw(rest_url('aksrt/v1/front-submit/media/video'))],
|
||
'file' => ['url' => esc_url_raw(rest_url('aksrt/v1/front-submit/media/file'))],
|
||
],
|
||
|
||
|
||
'leaveWarning' => !empty($ctx['settings']['leave_warning']),
|
||
'ai' => [
|
||
'available' => !empty($ctx['ai_available']),
|
||
'summary' => !empty($ctx['ai_available']),
|
||
'tags' => !empty($ctx['ai_available']),
|
||
],
|
||
'editor' => [
|
||
'canUploadImage' => !empty($ctx['can_upload_img']),
|
||
'canUploadVideo' => !empty($ctx['can_upload_video']),
|
||
'canEmbedVideo' => !empty($ctx['can_iframe']),
|
||
'canUploadFile' => !empty($ctx['can_upload_file']),
|
||
'canHide' => !empty($ctx['can_hide']),
|
||
'canPay' => !empty($ctx['can_pay']),
|
||
],
|
||
'uploads' => [
|
||
'image' => !empty($ctx['can_upload_img']) ? [
|
||
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/image')),
|
||
'maxSize' => $submit_image_max_size,
|
||
] : null,
|
||
'video' => !empty($ctx['can_upload_video']) ? [
|
||
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/video')),
|
||
'maxSize' => $submit_video_max_size,
|
||
] : null,
|
||
'resource' => !empty($ctx['can_upload_file']) ? [
|
||
'url' => esc_url_raw(rest_url('aksrt/v1/front-submit/upload/resource')),
|
||
'maxSize' => $resource_max_size,
|
||
] : null,
|
||
],
|
||
'i18n' => [
|
||
'confirmLeave' => __('你有未保存的更改,确定要离开吗?', 'aksrt'),
|
||
'saving' => __('保存中...', 'aksrt'),
|
||
'saved' => __('草稿已保存', 'aksrt'),
|
||
'submitting' => __('提交中...', 'aksrt'),
|
||
'submitted' => __('投稿已提交', 'aksrt'),
|
||
'error' => __('操作失败,请重试', 'aksrt'),
|
||
'confirmDelete' => __('确定要删除这个草稿吗?', 'aksrt'),
|
||
'aiGenerating' => __('生成中…', 'aksrt'),
|
||
'aiFailed' => __('AI 生成失败', 'aksrt'),
|
||
'needContent' => __('请先填写正文内容', 'aksrt'),
|
||
'aiFilled' => __('已填入,可继续编辑', 'aksrt'),
|
||
'deleting' => __('正在删除草稿…', 'aksrt'),
|
||
'deleted' => __('草稿已删除', 'aksrt'),
|
||
'uploading' => __('正在上传…', 'aksrt'),
|
||
'uploaded' => __('上传成功', 'aksrt'),
|
||
'fileTooLarge' => __('文件大小超过限制', 'aksrt'),
|
||
'lastSaved' => __('最后保存:', 'aksrt'),
|
||
'preview' => __('预览文章', 'aksrt'),
|
||
'setVideoCoverTitle' => __('为视频设置封面', 'aksrt'),
|
||
'close' => __('关闭', 'aksrt'),
|
||
'insertImage' => __('插入图片', 'aksrt'),
|
||
'uploadImage' => __('上传图片', 'aksrt'),
|
||
'externalImage' => __('外链图片', 'aksrt'),
|
||
'insertVideo' => __('插入视频', 'aksrt'),
|
||
'uploadVideo' => __('上传视频', 'aksrt'),
|
||
'externalVideo' => __('外链视频', 'aksrt'),
|
||
'embedVideo' => __('嵌入视频', 'aksrt'),
|
||
'selectVideo' => __('选择或拖入视频', 'aksrt'),
|
||
'videoUploadHint' => __('上传完成后自动插入正文', 'aksrt'),
|
||
'externalVideoHint' => __('请填写视频文件地址:', 'aksrt'),
|
||
'embedVideoHint' => __('请输入嵌入地址或者直接粘贴 iframe 嵌入代码:', 'aksrt'),
|
||
'confirmEmbed' => __('确认嵌入', 'aksrt'),
|
||
'insertFile' => __('上传附件', 'aksrt'),
|
||
'uploadFile' => __('上传附件', 'aksrt'),
|
||
'externalFile' => __('输入地址', 'aksrt'),
|
||
'selectFile' => __('选择或拖入附件', 'aksrt'),
|
||
'fileUploadHint' => __('上传完成后自动插入正文', 'aksrt'),
|
||
'externalFileHint' => __('请填写附件地址:', 'aksrt'),
|
||
'selectImages' => __('选择或拖入图片', 'aksrt'),
|
||
'imageUploadHint' => __('可批量选择,上传完成后自动插入正文', 'aksrt'),
|
||
'selectedFiles' => __('已选择 %d 个文件', 'aksrt'),
|
||
'confirmUpload' => __('确认上传', 'aksrt'),
|
||
'externalImageHint' => __('每行填写一个图片地址:', 'aksrt'),
|
||
'confirmInsert' => __('确认插入', 'aksrt'),
|
||
'invalidMediaUrl' => __('请填写有效地址', 'aksrt'),
|
||
'invalidVideoUrl' => __('请填写有效的视频嵌入地址', 'aksrt'),
|
||
'invalidFile' => __('请选择有效文件', 'aksrt'),
|
||
'uploadUnavailable' => __('当前账号不能上传此类文件', 'aksrt'),
|
||
'mine' => __('我的媒体', 'aksrt'),
|
||
'mineImage' => __('我的图片', 'aksrt'),
|
||
'mineVideo' => __('我的视频', 'aksrt'),
|
||
'mineFile' => __('我的文件', 'aksrt'),
|
||
'search' => __('搜索', 'aksrt'),
|
||
'searchMedia' => __('搜索媒体(至少 2 个字符)', 'aksrt'),
|
||
'searchMin' => __('请输入至少 2 个字符进行搜索', 'aksrt'),
|
||
'clear' => __('清除', 'aksrt'),
|
||
'loadMore' => __('加载更多', 'aksrt'),
|
||
'loading' => __('加载中…', 'aksrt'),
|
||
'empty' => __('暂无媒体文件', 'aksrt'),
|
||
'emptyMedia' => __('暂无媒体文件', 'aksrt'),
|
||
'mediaError' => __('媒体加载失败', 'aksrt'),
|
||
'mediaUnavailable' => __('媒体库暂不可用', 'aksrt'),
|
||
'confirmSelected' => __('确认选择(%d)', 'aksrt'),
|
||
'maxItems' => __('最多选择 %d 个文件', 'aksrt'),
|
||
'maxMediaItems' => __('最多选择 %d 个文件', 'aksrt'),
|
||
'uploadingClose' => __('上传中,请稍候再关闭', 'aksrt'),
|
||
'mediaPickerUnavailable' => __('媒体选择器加载失败,请刷新页面后重试', 'aksrt'),
|
||
'download' => __('下载', 'aksrt'),
|
||
|
||
'quote' => __('引言', 'aksrt'),
|
||
'quoteGray' => __('灰色引言', 'aksrt'),
|
||
'quoteRed' => __('红色引言', 'aksrt'),
|
||
'quoteBlue' => __('蓝色引言', 'aksrt'),
|
||
'quoteGreen' => __('绿色引言', 'aksrt'),
|
||
'edit' => __('编辑', 'aksrt'),
|
||
'insert' => __('插入', 'aksrt'),
|
||
'highlightCode' => __('高亮代码', 'aksrt'),
|
||
'selectLanguage' => __('选择语言', 'aksrt'),
|
||
'codeGeneric' => __('通用高亮', 'aksrt'),
|
||
'codeTheme' => __('主题', 'aksrt'),
|
||
'codeFollowGlobal' => __('跟随全局设置', 'aksrt'),
|
||
'codeLabel' => __('代码:', 'aksrt'),
|
||
'hiddenContent' => __('隐藏内容', 'aksrt'),
|
||
'hiddenPlaceholder' => __('隐藏内容', 'aksrt'),
|
||
'replyVisible' => __('回复可见', 'aksrt'),
|
||
'loginVisible' => __('登录可见', 'aksrt'),
|
||
'vipVisible' => __('VIP 可见', 'aksrt'),
|
||
'payVisible' => __('付费可见', 'aksrt'),
|
||
'addResource' => __('添加资源', 'aksrt'),
|
||
'editResource' => __('编辑资源', 'aksrt'),
|
||
'downloadUrl' => __('下载地址', 'aksrt'),
|
||
'enterDownloadUrl' => __('请输入资源下载地址', 'aksrt'),
|
||
'pasteLinkHint' => __('支持直接粘贴网盘分享链接,并自动识别提取码', 'aksrt'),
|
||
'resourceNote' => __('资源备注', 'aksrt'),
|
||
'enterResourceNote' => __('请输入资源备注', 'aksrt'),
|
||
'resourceNoteHint' => __('例如提取码、解压密码等', 'aksrt'),
|
||
'clickCopy' => __('点击复制', 'aksrt'),
|
||
'copyName' => __('复制名称', 'aksrt'),
|
||
'copyContent' => __('复制内容', 'aksrt'),
|
||
'copyHint' => __('填写后,用户可点击资源备注复制内容', 'aksrt'),
|
||
'customButton' => __('自定义按钮', 'aksrt'),
|
||
'customButtonPlaceholder' => __('自定义下载按钮名称', 'aksrt'),
|
||
'selectButtonStyle' => __('选择按钮样式', 'aksrt'),
|
||
'extractCode' => __('提取码', 'aksrt'),
|
||
'extractCodeColon' => __('提取码:', 'aksrt'),
|
||
'confirm' => __('确认', 'aksrt'),
|
||
],
|
||
]);
|
||
}
|
||
|
||
get_header();
|
||
?>
|
||
<main id="main-content" role="main" class="container" tabindex="-1">
|
||
<form id="aksrt-submit-form" data-aksrt-submit-form data-dirty="false">
|
||
<div class="content-wrap newposts-wrap">
|
||
<div class="content-layout">
|
||
<?php
|
||
$main = get_template_directory() . '/templates/parts/submit/editor-main.php';
|
||
if (file_exists($main)) {
|
||
include $main;
|
||
}
|
||
?>
|
||
</div>
|
||
</div>
|
||
<div class="sidebar show-sidebar">
|
||
<?php \AKSRT\WidgetSystem\WidgetAreas::render('newposts_sidebar_top'); ?>
|
||
<?php
|
||
$terms = get_template_directory() . '/templates/parts/submit/sidebar-terms.php';
|
||
if (file_exists($terms)) {
|
||
include $terms;
|
||
}
|
||
$pay = get_template_directory() . '/templates/parts/submit/sidebar-pay.php';
|
||
if (file_exists($pay)) {
|
||
include $pay;
|
||
}
|
||
$actions = get_template_directory() . '/templates/parts/submit/sidebar-submit.php';
|
||
if (file_exists($actions)) {
|
||
include $actions;
|
||
}
|
||
?>
|
||
<?php \AKSRT\WidgetSystem\WidgetAreas::render('newposts_sidebar_bottom'); ?>
|
||
</div>
|
||
</form>
|
||
</main>
|
||
<?php
|
||
get_footer();
|