feat(admin): replicate reference post-page settings page 1:1
- rewrite post_list.page schema (JS+PHP 2.0.0) with the reference field set: three cover types with option fieldsets (image 20-200% / slide CFS_Module::slide full config with nested dependsOn / video 0-200%), hide-time, p_indent, breadcrumbs (home-text as switcher), prevnext, authordesc, maxheight slider, yiyan block, copyright, button toptext, front/after content, related posts - migrate share_s to share page basic group and post_rewards_* to users features rewards group (runtime keys unchanged) - remap get_post_page_settings() to reference keys, normalize slide cover option, hardcode non-reference runtime flags (reading progress, favorites, author card), drop dual-path legacy aliases - wire slide option into aksrt_render_slider (effect/direction/spaceBetween/ speed/interval/loop/autoplay/nav/pagination, scale vs fixed-height modes), clamp image scale 20-200 and video scale 0-200 with 16:9 fallback, wire p_indent container class + CSS, resync frontend-tags fallback and FacadeBulk fallback, remap PostMetaBox cover keys - add post-page reference contract test; update stale cover-height and user-features contract tests Validation: node --test 464/464 pass, audit-admin-contracts errors=0, vite build ok, build-public-assets ok, php -l clean.
This commit is contained in:
@@ -46,83 +46,83 @@ class SchemaPostList {
|
||||
'page' => [
|
||||
'key' => 'page',
|
||||
'title' => '文章页面',
|
||||
'version' => '1.0.0',
|
||||
'version' => '2.0.0',
|
||||
'option_key' => 'aksrt_settings',
|
||||
'groups' => [
|
||||
['key' => 'navigation', 'title' => '文章导航', 'fields' => [
|
||||
['key' => 'post_reading_progress', 'label' => '阅读进度条', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'breadcrumbs_single_s', 'label' => '面包屑导航', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'breadcrumbs_home_text', 'label' => '面包屑首页文字', 'type' => 'input', 'default' => '首页', 'depends_on' => 'breadcrumbs_single_s'],
|
||||
['key' => 'breadcrumbs_single_text', 'label' => '末项显示「正文」', 'type' => 'switch', 'default' => true, 'depends_on' => 'breadcrumbs_single_s', 'description' => '关闭后末项显示文章标题'],
|
||||
['key' => 'post_prevnext_s', 'label' => '上一篇/下一篇', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_authordesc_s', 'label' => '作者简介', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_author_card_limit', 'label' => '作者卡文章数', 'type' => 'number', 'default' => 6, 'min' => 0, 'max' => 12],
|
||||
['key' => 'post_author_card_orderby', 'label' => '作者卡文章排序', 'type' => 'select', 'default' => 'views', 'options' => [
|
||||
['label' => '浏览量', 'value' => 'views'],
|
||||
['label' => '发布时间', 'value' => 'date'],
|
||||
['label' => '更新时间', 'value' => 'modified'],
|
||||
['label' => '评论数', 'value' => 'comment_count'],
|
||||
['key' => 'post_page', 'title' => '文章页面', 'fields' => [
|
||||
['key' => 'article_image_cover', 'label' => '图片封面', 'type' => 'switcher', 'default' => true, 'description' => '允许设置文章页顶部显示封面图'],
|
||||
['key' => 'article_image_cover_option', 'label' => ' ', 'type' => 'fieldset', 'default' => ['scale' => 35], 'dependsOn' => ['key' => 'article_image_cover', 'value' => true], 'description' => '图片封面配置', 'fields' => [
|
||||
['key' => 'scale', 'label' => '图片长宽比例', 'type' => 'number', 'default' => 35, 'min' => 20, 'max' => 200, 'step' => 5, 'unit' => '%'],
|
||||
]],
|
||||
['key' => 'post_author_card_style', 'label' => '作者卡文章样式', 'type' => 'radio', 'default' => 'card', 'options' => [
|
||||
['label' => '卡片', 'value' => 'card'],
|
||||
['key' => 'article_slide_cover', 'label' => '幻灯片封面', 'type' => 'switcher', 'default' => true, 'description' => '允许设置幻灯片为文章封面'],
|
||||
['key' => 'article_slide_cover_option', 'label' => ' ', 'type' => 'fieldset', 'default' => [
|
||||
'direction' => 'horizontal', 'loop' => true, 'button' => false, 'pagination' => true, 'effect' => 'slide',
|
||||
'scale_height' => true, 'scale' => 35, 'auto_height' => false, 'max_height' => 500, 'min_height' => 180,
|
||||
'pc_height' => 380, 'm_height' => 180, 'spacebetween' => 15, 'speed' => 0, 'autoplay' => true, 'interval' => 4,
|
||||
], 'dependsOn' => ['key' => 'article_slide_cover', 'value' => true], 'fields' => [
|
||||
['key' => 'direction', 'label' => '幻灯片方向', 'type' => 'radio', 'default' => 'horizontal', 'options' => [
|
||||
['label' => '左右切换', 'value' => 'horizontal'],
|
||||
['label' => '上下切换', 'value' => 'vertical'],
|
||||
]],
|
||||
['key' => 'loop', 'label' => '循环切换', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'button', 'label' => '显示翻页按钮', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'pagination', 'label' => '显示指示器', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'effect', 'label' => '切换动画', 'type' => 'select', 'default' => 'slide', 'options' => [
|
||||
['label' => '滑动', 'value' => 'slide'],
|
||||
['label' => '淡出淡入', 'value' => 'fade'],
|
||||
['label' => '3D方块', 'value' => 'cube'],
|
||||
['label' => '3D滑入', 'value' => 'coverflow'],
|
||||
['label' => '3D翻转', 'value' => 'flip'],
|
||||
]],
|
||||
['key' => 'scale_height', 'label' => '按比例自动高度', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'direction', 'not' => 'vertical']],
|
||||
['key' => 'scale', 'label' => '长宽比例', 'type' => 'number', 'default' => 35, 'min' => 10, 'max' => 300, 'step' => 5, 'unit' => '%', 'dependsOn' => ['all' => [['key' => 'direction', 'not' => 'vertical'], ['key' => 'scale_height', 'value' => true]]]],
|
||||
['key' => 'auto_height', 'label' => '自动高度', 'type' => 'switch', 'default' => false, 'dependsOn' => ['all' => [['key' => 'direction', 'not' => 'vertical'], ['key' => 'scale_height', 'value' => false]]]],
|
||||
['key' => 'max_height', 'label' => '最大高度', 'type' => 'number', 'default' => 500, 'min' => 120, 'max' => 800, 'step' => 20, 'unit' => 'PX', 'dependsOn' => ['all' => [['key' => 'auto_height', 'value' => true], ['key' => 'direction', 'not' => 'vertical'], ['key' => 'scale_height', 'value' => false]]]],
|
||||
['key' => 'min_height', 'label' => '最小高度', 'type' => 'number', 'default' => 180, 'min' => 100, 'max' => 500, 'step' => 20, 'unit' => 'PX', 'dependsOn' => ['all' => [['key' => 'auto_height', 'value' => true], ['key' => 'direction', 'not' => 'vertical'], ['key' => 'scale_height', 'value' => false]]]],
|
||||
['key' => 'pc_height', 'label' => '电脑端高度', 'type' => 'number', 'default' => 380, 'min' => 120, 'max' => 800, 'step' => 20, 'unit' => 'PX'],
|
||||
['key' => 'm_height', 'label' => '移动端高度', 'type' => 'number', 'default' => 180, 'min' => 100, 'max' => 500, 'step' => 20, 'unit' => 'PX'],
|
||||
['key' => 'spacebetween', 'label' => '幻灯片间距', 'type' => 'number', 'default' => 15, 'min' => 0, 'max' => 500, 'step' => 5, 'unit' => 'PX'],
|
||||
['key' => 'speed', 'label' => '切换速度', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 3000, 'step' => 100, 'unit' => '毫秒', 'description' => '切换过程的时间(越小越快),设置为0则为自动模式'],
|
||||
['key' => 'autoplay', 'label' => '自动播放', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'interval', 'label' => '停顿时间', 'type' => 'number', 'default' => 4, 'min' => 0, 'max' => 20, 'step' => 1, 'unit' => '秒', 'dependsOn' => ['key' => 'autoplay', 'value' => true], 'description' => '自动切换的时间间隔(越小越快)'],
|
||||
]],
|
||||
['key' => 'article_video_cover', 'label' => '视频封面', 'type' => 'switcher', 'default' => true, 'description' => '允许设置视频为文章封面'],
|
||||
['key' => 'article_video_cover_option', 'label' => ' ', 'type' => 'fieldset', 'default' => ['scale' => 0], 'dependsOn' => ['key' => 'article_video_cover', 'value' => true], 'description' => '视频封面配置', 'fields' => [
|
||||
['key' => 'scale', 'label' => '固定长宽比例', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 200, 'step' => 5, 'unit' => '%', 'description' => '为0则不固定长宽比例'],
|
||||
]],
|
||||
['key' => 'post_single_hide_time_s', 'label' => '隐藏时间', 'type' => 'switcher', 'default' => false, 'description' => '隐藏文章的更新及发布时间显示'],
|
||||
['key' => 'post_p_indent_s', 'label' => '内容段落缩进', 'type' => 'switcher', 'default' => false, 'description' => '开启后文章内容每一个段落首行将向右偏移2个文字距离'],
|
||||
['key' => 'breadcrumbs_single_s', 'label' => '面包屑导航', 'type' => 'switcher', 'default' => true],
|
||||
['key' => 'breadcrumbs_home_text', 'label' => '面包屑导航用“首页”替代网站名称', 'type' => 'switcher', 'default' => true, 'dependsOn' => ['key' => 'breadcrumbs_single_s', 'value' => true]],
|
||||
['key' => 'post_prevnext_s', 'label' => '上一页、下一页版块', 'type' => 'switcher', 'default' => true],
|
||||
['key' => 'post_authordesc_s', 'label' => '作者信息版块', 'type' => 'switcher', 'default' => true],
|
||||
['key' => 'article_maxheight_kg', 'label' => '内容高度限制', 'type' => 'switcher', 'default' => false, 'description' => '此处为全局设置,每篇文章可单独设置', 'help' => '全局开关'],
|
||||
['key' => 'article_maxheight', 'label' => '限制的最大高度', 'type' => 'slider', 'default' => 1000, 'min' => 600, 'max' => 3000, 'step' => 100, 'unit' => 'px', 'dependsOn' => ['key' => 'article_maxheight_kg', 'value' => true], 'description' => '开启后如果文章高度超过设定值则会显示展开阅读全文的按钮。每篇文章可单独开启此功能'],
|
||||
['key' => 'yiyan_single_content_header', 'label' => '文章内容头部显示一言', 'type' => 'switcher', 'default' => false],
|
||||
['key' => 'yiyan_single_content_footer', 'label' => '文章内容尾部显示一言', 'type' => 'switcher', 'default' => false],
|
||||
['key' => 'yiyan_single_box', 'label' => '文章页面下方独立一言版块', 'type' => 'switcher', 'default' => false],
|
||||
['key' => 'post_copyright_s', 'label' => '版权声明', 'type' => 'switcher', 'default' => true],
|
||||
['key' => 'post_copyright', 'label' => '版权提示内容', 'type' => 'textarea', 'default' => '文章版权归作者所有,未经允许请勿转载。', 'rows' => 2, 'dependsOn' => ['key' => 'post_copyright_s', 'value' => true], 'description' => '支持HTML代码,请注意代码规范及标签闭合'],
|
||||
['key' => 'post_button_toptext', 'label' => '文章页脚文案', 'type' => 'input', 'default' => '喜欢就支持一下吧', 'description' => '文章底部打赏、分享按钮上面的文字'],
|
||||
['key' => 'post_front_content', 'label' => '在文章内容前-插入内容', 'type' => 'textarea', 'default' => '', 'rows' => 3],
|
||||
['key' => 'post_after_content', 'label' => '在文章内容后-插入内容', 'type' => 'textarea', 'default' => '', 'rows' => 3, 'description' => '在每篇文章顶部和尾部插入内容,可以插入广告或者文章说明等内容。支持HTML代码,请注意代码规范及标签闭合'],
|
||||
['key' => 'post_related_s', 'label' => '相关文章版块', 'type' => 'switcher', 'default' => true],
|
||||
['key' => 'post_related_type', 'label' => '显示样式', 'type' => 'image_select', 'default' => 'img', 'dependsOn' => ['key' => 'post_related_s', 'value' => true], 'options' => [
|
||||
['label' => '图文卡片', 'value' => 'img'],
|
||||
['label' => '列表', 'value' => 'list'],
|
||||
['label' => '纯文字', 'value' => 'text'],
|
||||
]],
|
||||
['key' => 'related_title', 'label' => '版块标题', 'type' => 'input', 'default' => '相关推荐', 'dependsOn' => ['key' => 'post_related_s', 'value' => true]],
|
||||
['key' => 'post_related_n', 'label' => '显示数量', 'type' => 'number', 'default' => 6, 'min' => 4, 'max' => 12, 'step' => 2, 'unit' => '篇', 'dependsOn' => ['key' => 'post_related_s', 'value' => true]],
|
||||
['key' => 'post_related_orderby', 'label' => '排序方式', 'type' => 'select', 'default' => 'views', 'dependsOn' => ['key' => 'post_related_s', 'value' => true], 'options' => [
|
||||
['label' => '更新时间', 'value' => 'modified'],
|
||||
['label' => '发布时间', 'value' => 'date'],
|
||||
['label' => '浏览量', 'value' => 'views'],
|
||||
['label' => '点赞量', 'value' => 'like'],
|
||||
['label' => '评论量', 'value' => 'comment_count'],
|
||||
['label' => '收藏数量', 'value' => 'favorite'],
|
||||
['label' => '随机', 'value' => 'rand'],
|
||||
]],
|
||||
['key' => 'post_single_hide_time_s', 'label' => '隐藏文章时间', 'type' => 'switch', 'default' => false],
|
||||
]],
|
||||
['key' => 'cover', 'title' => '封面展示', 'fields' => [
|
||||
['key' => 'post_article_image_cover', 'label' => '图片封面', 'type' => 'switch', 'default' => true, 'description' => '文章有特色图时自动展示封面'],
|
||||
['key' => 'post_article_image_cover_scale', 'label' => '封面高度比例(%)', 'type' => 'number', 'default' => 35, 'min' => 10, 'max' => 100],
|
||||
['key' => 'post_article_slide_cover', 'label' => '幻灯片封面', 'type' => 'switch', 'default' => true, 'description' => '文章有图集时以轮播形式展示封面'],
|
||||
['key' => 'post_article_video_cover', 'label' => '视频封面', 'type' => 'switch', 'default' => true, 'description' => '文章有视频时以视频播放器作为封面'],
|
||||
['key' => 'post_article_video_cover_scale', 'label' => '视频封面高度比例(%)', 'type' => 'number', 'default' => 56, 'min' => 20, 'max' => 100],
|
||||
]],
|
||||
['key' => 'related', 'title' => '相关推荐', 'fields' => [
|
||||
['key' => 'post_related_s', 'label' => '显示相关推荐', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_related_type', 'label' => '展示样式', 'type' => 'radio', 'default' => 'img', 'options' => [
|
||||
['label' => '图文卡片', 'value' => 'img'],
|
||||
['label' => '列表', 'value' => 'list'],
|
||||
['label' => '纯文字', 'value' => 'text'],
|
||||
]],
|
||||
['key' => 'related_title', 'label' => '推荐标题', 'type' => 'input', 'default' => '相关推荐'],
|
||||
['key' => 'post_related_n', 'label' => '推荐数量', 'type' => 'number', 'default' => 6, 'min' => 4, 'max' => 12, 'step' => 2],
|
||||
['key' => 'post_related_orderby', 'label' => '推荐排序', 'type' => 'select', 'default' => 'views', 'options' => [
|
||||
['label' => '更新时间', 'value' => 'modified'],
|
||||
['label' => '发布时间', 'value' => 'date'],
|
||||
['label' => '浏览量', 'value' => 'views'],
|
||||
['label' => '点赞量', 'value' => 'like'],
|
||||
['label' => '评论量', 'value' => 'comment_count'],
|
||||
['label' => '收藏数量', 'value' => 'favorite'],
|
||||
['label' => '随机', 'value' => 'rand'],
|
||||
]],
|
||||
]],
|
||||
['key' => 'interactions', 'title' => '互动功能', 'fields' => [
|
||||
['key' => 'post_favorite_enabled', 'label' => '收藏', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'share_s', 'label' => '分享按钮', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_copyright_enabled', 'label' => '版权信息', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_copyright_text', 'label' => '版权默认文案', 'type' => 'textarea', 'default' => '', 'description' => '留空则自动生成"本文由 XX 原创发布"'],
|
||||
['key' => 'post_wechat_share', 'label' => '微信分享', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_rewards_s', 'label' => '用户打赏', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_rewards_text', 'label' => '打赏按钮文案', 'type' => 'input', 'default' => '赞赏'],
|
||||
['key' => 'post_rewards_amounts', 'label' => '快捷金额', 'type' => 'input', 'default' => '5,10,20,50,100', 'description' => '英文逗号分隔,赞赏直接进入作者站内余额'],
|
||||
['key' => 'post_rewards_custom', 'label' => '允许自定义金额', 'type' => 'switch', 'default' => true],
|
||||
['key' => 'post_rewards_min', 'label' => '最低金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1.00', 'min' => 0.01, 'max' => 1000, 'step' => 0.01],
|
||||
['key' => 'post_rewards_max', 'label' => '最高金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1000.00', 'min' => 1, 'max' => 100000, 'step' => 0.01],
|
||||
['key' => 'post_button_toptext', 'label' => '按钮上方文案', 'type' => 'input', 'default' => '喜欢就支持一下吧'],
|
||||
]],
|
||||
['key' => 'content', 'title' => '内容处理', 'fields' => [
|
||||
['key' => 'post_p_indent', 'label' => '段落缩进', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_maxheight_kg', 'label' => '内容高度限制', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_maxheight', 'label' => '最大高度', 'type' => 'number', 'default' => 1000, 'min' => 600, 'max' => 3000],
|
||||
['key' => 'post_front_content', 'label' => '文章头部内容', 'type' => 'textarea', 'default' => ''],
|
||||
['key' => 'post_after_content', 'label' => '文章底部内容', 'type' => 'textarea', 'default' => ''],
|
||||
]],
|
||||
['key' => 'yiyan', 'title' => '一言', 'fields' => [
|
||||
['key' => 'post_yiyan_header', 'label' => '文章头部一言', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_yiyan_footer', 'label' => '文章底部一言', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'post_yiyan_box', 'label' => '一言盒子', 'type' => 'switch', 'default' => false],
|
||||
]],
|
||||
['key' => 'meta', 'title' => 'Meta设置', 'fields' => [
|
||||
['key' => 'post_views_s', 'label' => '浏览统计', 'type' => 'switch', 'default' => true],
|
||||
]],
|
||||
],
|
||||
],
|
||||
@@ -286,7 +286,10 @@ class SchemaPostList {
|
||||
'version' => '1.0.0',
|
||||
'option_key' => 'aksrt_settings',
|
||||
'groups' => [
|
||||
['key' => 'basic', 'title' => '分享设置', 'fields' => [
|
||||
['key' => 'basic', 'title' => '分享按钮', 'fields' => [
|
||||
['key' => 'share_s', 'label' => '分享按钮', 'type' => 'switcher', 'default' => true, 'help' => '关闭后,在文章页面将不显示分享按钮,论坛及商城不受影响'],
|
||||
]],
|
||||
['key' => 'wechat', 'title' => '微信分享', 'fields' => [
|
||||
['key' => 'share_wechat_s', 'label' => '微信分享', 'type' => 'switch', 'default' => false],
|
||||
['key' => 'share_wechat_appid', 'label' => 'AppID', 'type' => 'input', 'default' => ''],
|
||||
['key' => 'share_wechat_app_secret', 'label' => 'AppSecret', 'type' => 'input', 'default' => ''],
|
||||
|
||||
@@ -525,6 +525,14 @@ class SchemaUsers {
|
||||
['key' => 'user_cover_img', 'label' => '用户默认封面', 'type' => 'media', 'default' => get_theme_file_uri('assets/img/user_t.jpg'), 'help' => '建议尺寸 1000×400;用户未设置封面时显示此图。'],
|
||||
['key' => 'user_desc_std', 'label' => '用户默认签名', 'type' => 'input', 'default' => '这家伙很懒,什么都没有写...', 'help' => '用户未设置个人简介时显示的默认文案。'],
|
||||
]],
|
||||
['key' => 'rewards', 'title' => '打赏', 'fields' => [
|
||||
['key' => 'post_rewards_s', 'label' => '用户打赏功能', 'type' => 'switcher', 'default' => true, 'help' => '开启后,登录用户可使用站内余额赞赏作者,金额直接进入作者余额。'],
|
||||
['key' => 'post_rewards_text', 'label' => '打赏按钮文案', 'type' => 'input', 'default' => '赞赏', 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true], 'help' => '自定义打赏按钮文字'],
|
||||
['key' => 'post_rewards_amounts', 'label' => '快捷金额', 'type' => 'input', 'default' => '5,10,20,50,100', 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true], 'help' => '使用英文逗号分隔'],
|
||||
['key' => 'post_rewards_custom', 'label' => '允许自定义金额', 'type' => 'switcher', 'default' => true, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
|
||||
['key' => 'post_rewards_min', 'label' => '最低金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1.00', 'min' => 0.01, 'max' => 1000, 'step' => 0.01, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
|
||||
['key' => 'post_rewards_max', 'label' => '最高金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1000.00', 'min' => 1, 'max' => 100000, 'step' => 0.01, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
|
||||
]],
|
||||
],
|
||||
],
|
||||
'verify' => [
|
||||
|
||||
@@ -109,13 +109,13 @@ class PostMetaBox {
|
||||
public function render_meta_box(\WP_Post $post): void {
|
||||
$meta = self::get_meta($post->ID);
|
||||
$settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
|
||||
$show_image = !array_key_exists('post_article_image_cover', $settings) || !empty($settings['post_article_image_cover']);
|
||||
$show_image = !array_key_exists('article_image_cover', $settings) || !empty($settings['article_image_cover']);
|
||||
$show_slide = !array_key_exists('list_thumb_slides_s', $settings)
|
||||
|| !empty($settings['list_thumb_slides_s'])
|
||||
|| !empty($settings['post_article_slide_cover']);
|
||||
|| !empty($settings['article_slide_cover']);
|
||||
$show_video = !array_key_exists('list_thumb_video_s', $settings)
|
||||
|| !empty($settings['list_thumb_video_s'])
|
||||
|| !empty($settings['post_article_video_cover']);
|
||||
|| !empty($settings['article_video_cover']);
|
||||
|
||||
wp_nonce_field('aksrt_post_extension_save', 'aksrt_post_extension_nonce');
|
||||
?>
|
||||
|
||||
@@ -165,10 +165,20 @@ trait FacadeBulk {
|
||||
}
|
||||
|
||||
$settings = self::get_all();
|
||||
// 参考主题语义:switcher 开 = 面包屑用“首页”替代网站名称。
|
||||
$breadcrumbs_home_replace = !isset($settings['breadcrumbs_home_text']) || !empty($settings['breadcrumbs_home_text']);
|
||||
return [
|
||||
'reading_progress' => !isset($settings['post_reading_progress']) || !empty($settings['post_reading_progress']),
|
||||
'breadcrumbs' => !isset($settings['breadcrumbs_single_s']) || !empty($settings['breadcrumbs_single_s']),
|
||||
'breadcrumbs_home' => trim((string) ($settings['breadcrumbs_home_text'] ?? '')) ?: __('首页', 'aksrt'),
|
||||
'reading_progress' => true,
|
||||
'breadcrumbs' => !isset($settings['breadcrumbs_single_s']) || !empty($settings['breadcrumbs_single_s']),
|
||||
'breadcrumbs_home' => $breadcrumbs_home_replace ? __('首页', 'aksrt') : (string) get_bloginfo('name'),
|
||||
'breadcrumbs_home_replace' => $breadcrumbs_home_replace,
|
||||
'p_indent' => !empty($settings['post_p_indent_s']),
|
||||
'article_image_cover' => !isset($settings['article_image_cover']) || !empty($settings['article_image_cover']),
|
||||
'article_image_cover_scale' => 35,
|
||||
'article_slide_cover' => !isset($settings['article_slide_cover']) || !empty($settings['article_slide_cover']),
|
||||
'article_slide_cover_option'=> [],
|
||||
'article_video_cover' => !isset($settings['article_video_cover']) || !empty($settings['article_video_cover']),
|
||||
'article_video_cover_scale' => 0,
|
||||
'related_enabled' => !isset($settings['post_related_s']) || !empty($settings['post_related_s']),
|
||||
'related_count' => max(4, min(12, (int) ($settings['post_related_n'] ?? 6))),
|
||||
'related_style' => in_array(($settings['post_related_type'] ?? 'img'), ['img', 'list', 'text'], true) ? (string) $settings['post_related_type'] : 'img',
|
||||
|
||||
@@ -152,9 +152,9 @@ class PostDisplay {
|
||||
|
||||
// Canonical render keys (used by aksrt_single_*). Legacy *_s aliases kept for older callers.
|
||||
$breadcrumbs = !isset($settings['breadcrumbs_single_s']) || !empty($settings['breadcrumbs_single_s']);
|
||||
$breadcrumbs_home = sanitize_text_field((string) ($settings['breadcrumbs_home_text'] ?? '首页'));
|
||||
// legacy breadcrumbs_single_text: true → last crumb is "正文"; false → full title.
|
||||
$breadcrumbs_single_text = !isset($settings['breadcrumbs_single_text']) || !empty($settings['breadcrumbs_single_text']);
|
||||
// 参考主题语义:switcher 开 = 面包屑用“首页”替代网站名称。
|
||||
$breadcrumbs_home_replace = !isset($settings['breadcrumbs_home_text']) || !empty($settings['breadcrumbs_home_text']);
|
||||
$breadcrumbs_home = $breadcrumbs_home_replace ? __('首页', 'aksrt') : (string) get_bloginfo('name');
|
||||
$prevnext = !isset($settings['post_prevnext_s']) || !empty($settings['post_prevnext_s']);
|
||||
$authordesc = !isset($settings['post_authordesc_s']) || !empty($settings['post_authordesc_s']);
|
||||
$hide_time = !empty($settings['post_single_hide_time_s']);
|
||||
@@ -195,23 +195,22 @@ class PostDisplay {
|
||||
}
|
||||
$rewards_min = $rewards_min_amount->decimal();
|
||||
$rewards_max = $rewards_max_amount->decimal();
|
||||
$author_card_limit = max(0, min(12, (int) ($settings['post_author_card_limit'] ?? 6)));
|
||||
$author_card_orderby = sanitize_key((string) ($settings['post_author_card_orderby'] ?? 'views'));
|
||||
if (!in_array($author_card_orderby, ['views', 'date', 'modified', 'comment_count'], true)) {
|
||||
$author_card_orderby = 'views';
|
||||
}
|
||||
$author_card_style = sanitize_key((string) ($settings['post_author_card_style'] ?? 'card'));
|
||||
if (!in_array($author_card_style, ['card', 'list'], true)) {
|
||||
$author_card_style = 'card';
|
||||
}
|
||||
$maxheight_enabled = !empty($settings['article_maxheight_kg'])
|
||||
|| !empty($settings['post_article_maxheight_kg'])
|
||||
|| !empty($settings['post_maxheight_kg']);
|
||||
$maxheight = max(0, (int) ($settings['article_maxheight'] ?? $settings['post_article_maxheight'] ?? $settings['post_maxheight'] ?? 1000));
|
||||
// 内容高度限制(参考键 article_maxheight_kg / article_maxheight)。
|
||||
$maxheight_enabled = !empty($settings['article_maxheight_kg']);
|
||||
$maxheight = max(0, (int) ($settings['article_maxheight'] ?? 1000));
|
||||
if ($maxheight <= 0) {
|
||||
$maxheight = 1000;
|
||||
}
|
||||
|
||||
// 封面(参考键 article_*_cover + option fieldset)。
|
||||
$image_cover_option = is_array($settings['article_image_cover_option'] ?? null) ? $settings['article_image_cover_option'] : [];
|
||||
$image_cover_scale = max(20, min(200, (int) ($image_cover_option['scale'] ?? 35)));
|
||||
$video_cover_option = is_array($settings['article_video_cover_option'] ?? null) ? $settings['article_video_cover_option'] : [];
|
||||
$video_cover_scale = max(0, min(200, (int) ($video_cover_option['scale'] ?? 0)));
|
||||
|
||||
$slide_option_raw = is_array($settings['article_slide_cover_option'] ?? null) ? $settings['article_slide_cover_option'] : [];
|
||||
$slide_option = self::normalize_slide_cover_option($slide_option_raw);
|
||||
|
||||
// 图片灯箱(参考主题 imagelightbox*):pc_s/m_s 复选框归并为单一开关。
|
||||
$lightbox_type = sanitize_key((string) ($settings['imagelightbox_type'] ?? 'group'));
|
||||
if (!in_array($lightbox_type, ['group', 'alone'], true)) {
|
||||
@@ -245,24 +244,28 @@ class PostDisplay {
|
||||
}
|
||||
|
||||
return [
|
||||
'reading_progress' => !isset($settings['post_reading_progress']) || !empty($settings['post_reading_progress']),
|
||||
// 参考主题无阅读进度条配置:功能常开(字段已随 1:1 复刻移除)。
|
||||
'reading_progress' => true,
|
||||
// Canonical + legacy breadcrumbs.
|
||||
'breadcrumbs' => $breadcrumbs,
|
||||
'breadcrumbs_home' => $breadcrumbs_home,
|
||||
'breadcrumbs_home_replace' => $breadcrumbs_home_replace,
|
||||
'breadcrumbs_single_s' => $breadcrumbs,
|
||||
'breadcrumbs_home_text' => $breadcrumbs_home,
|
||||
'breadcrumbs_single_text' => $breadcrumbs_single_text,
|
||||
'breadcrumbs_home_text' => $breadcrumbs_home_replace,
|
||||
'breadcrumbs_single_text' => true,
|
||||
// Canonical + legacy prev/next / time; canonical author card flag.
|
||||
'prevnext' => $prevnext,
|
||||
'prevnext_s' => $prevnext,
|
||||
'authordesc' => $authordesc,
|
||||
'hide_time' => $hide_time,
|
||||
'single_hide_time_s' => $hide_time,
|
||||
'article_image_cover' => !isset($settings['post_article_image_cover']) || !empty($settings['post_article_image_cover']),
|
||||
'article_image_cover_scale'=> max(10, min(100, (int) ($settings['post_article_image_cover_scale'] ?? 35))),
|
||||
'article_slide_cover' => !isset($settings['post_article_slide_cover']) || !empty($settings['post_article_slide_cover']),
|
||||
'article_video_cover' => !isset($settings['post_article_video_cover']) || !empty($settings['post_article_video_cover']),
|
||||
'article_video_cover_scale'=> max(20, min(100, (int) ($settings['post_article_video_cover_scale'] ?? 56))),
|
||||
'p_indent' => !empty($settings['post_p_indent_s']),
|
||||
'article_image_cover' => !isset($settings['article_image_cover']) || !empty($settings['article_image_cover']),
|
||||
'article_image_cover_scale'=> $image_cover_scale,
|
||||
'article_slide_cover' => !isset($settings['article_slide_cover']) || !empty($settings['article_slide_cover']),
|
||||
'article_slide_cover_option' => $slide_option,
|
||||
'article_video_cover' => !isset($settings['article_video_cover']) || !empty($settings['article_video_cover']),
|
||||
'article_video_cover_scale'=> $video_cover_scale,
|
||||
'lightbox' => !isset($settings['imagelightbox']) || !empty($settings['imagelightbox']),
|
||||
'lightbox_type' => $lightbox_type,
|
||||
'lightbox_thumbs' => $lightbox_thumbs,
|
||||
@@ -276,15 +279,16 @@ class PostDisplay {
|
||||
'related_orderby' => $related_orderby,
|
||||
'related_title' => sanitize_text_field((string) ($settings['related_title'] ?? '相关推荐')),
|
||||
'like_enabled' => !isset($settings['post_like_s']) || !empty($settings['post_like_s']),
|
||||
'favorite_enabled' => !isset($settings['post_favorite_enabled']) || !empty($settings['post_favorite_enabled']),
|
||||
// 参考主题无收藏开关:收藏按钮常显(字段已随 1:1 复刻移除)。
|
||||
'favorite_enabled' => true,
|
||||
// Canonical + legacy share.
|
||||
'share_enabled' => $share_enabled,
|
||||
'share_s' => $share_enabled,
|
||||
// Author card posts (legacy user_card_box defaults).
|
||||
'author_card_limit' => $author_card_limit,
|
||||
'author_card_orderby' => $author_card_orderby,
|
||||
'author_card_style' => $author_card_style,
|
||||
// On-site wallet tipping.
|
||||
// Author card posts(参考主题无独立配置:保持默认)。
|
||||
'author_card_limit' => 6,
|
||||
'author_card_orderby' => 'views',
|
||||
'author_card_style' => 'card',
|
||||
// On-site wallet tipping(配置位于用户功能页,参考主题同位置)。
|
||||
'rewards_enabled' => $rewards_enabled,
|
||||
'post_rewards_s' => $rewards_enabled,
|
||||
'rewards_text' => $rewards_text,
|
||||
@@ -296,14 +300,14 @@ class PostDisplay {
|
||||
// Content max height (legacy article_maxheight_kg / article_maxheight).
|
||||
'maxheight_enabled' => $maxheight_enabled,
|
||||
'maxheight' => $maxheight,
|
||||
'copyright_enabled' => !isset($settings['post_copyright_enabled']) || !empty($settings['post_copyright_enabled']),
|
||||
'copyright_text' => (string) ($settings['post_copyright_text'] ?? ''),
|
||||
'copyright_enabled' => !isset($settings['post_copyright_s']) || !empty($settings['post_copyright_s']),
|
||||
'copyright_text' => (string) ($settings['post_copyright'] ?? '文章版权归作者所有,未经允许请勿转载。'),
|
||||
'button_toptext' => sanitize_text_field((string) ($settings['post_button_toptext'] ?? '喜欢就支持一下吧')),
|
||||
'front_content' => (string) ($settings['post_front_content'] ?? ''),
|
||||
'after_content' => (string) ($settings['post_after_content'] ?? ''),
|
||||
'yiyan_header' => !empty($settings['post_yiyan_header']),
|
||||
'yiyan_footer' => !empty($settings['post_yiyan_footer']),
|
||||
'yiyan_box' => !empty($settings['post_yiyan_box']),
|
||||
'yiyan_header' => !empty($settings['yiyan_single_content_header']),
|
||||
'yiyan_footer' => !empty($settings['yiyan_single_content_footer']),
|
||||
'yiyan_box' => !empty($settings['yiyan_single_box']),
|
||||
'default_views_min' => max(0, min(9999, (int) ($views_range['min'] ?? 20))),
|
||||
'default_views_max' => max(1, min(9999, (int) ($views_range['max'] ?? 50))),
|
||||
'default_likes_min' => max(0, min(9999, (int) ($like_range['min'] ?? 5))),
|
||||
@@ -313,6 +317,35 @@ class PostDisplay {
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 幻灯片封面配置归一化(参考主题 CFS_Module::slide 全字段)。
|
||||
*/
|
||||
private static function normalize_slide_cover_option(array $raw): array {
|
||||
$effect = sanitize_key((string) ($raw['effect'] ?? 'slide'));
|
||||
if (!in_array($effect, ['slide', 'fade', 'cube', 'coverflow', 'flip'], true)) {
|
||||
$effect = 'slide';
|
||||
}
|
||||
$direction = sanitize_key((string) ($raw['direction'] ?? 'horizontal')) === 'vertical' ? 'vertical' : 'horizontal';
|
||||
return [
|
||||
'direction' => $direction,
|
||||
'loop' => !empty($raw['loop']),
|
||||
'button' => !empty($raw['button']),
|
||||
'pagination' => !empty($raw['pagination']),
|
||||
'effect' => $effect,
|
||||
'scale_height' => !empty($raw['scale_height']),
|
||||
'scale' => max(10, min(300, (int) ($raw['scale'] ?? 35))),
|
||||
'auto_height' => !empty($raw['auto_height']),
|
||||
'max_height' => max(120, min(800, (int) ($raw['max_height'] ?? 500))),
|
||||
'min_height' => max(100, min(500, (int) ($raw['min_height'] ?? 180))),
|
||||
'pc_height' => max(120, min(800, (int) ($raw['pc_height'] ?? 380))),
|
||||
'm_height' => max(100, min(500, (int) ($raw['m_height'] ?? 180))),
|
||||
'spacebetween' => max(0, min(500, (int) ($raw['spacebetween'] ?? 15))),
|
||||
'speed' => max(0, min(3000, (int) ($raw['speed'] ?? 0))),
|
||||
'autoplay' => !empty($raw['autoplay']),
|
||||
'interval' => max(0, min(20, (int) ($raw['interval'] ?? 4))),
|
||||
];
|
||||
}
|
||||
|
||||
public static function get_share_settings(): array {
|
||||
$settings = Settings::get_all();
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user