3.2.18: 清明按节气换算、主题内 [TOC] 目录、重建评论区替代 wpDiscuz
三项功能:
1. 清明不再用固定 04-04
清明是节气,日期在 4/4~4/6 之间浮动。硬编码 04-04 实测 1900-2100
共 201 年里只有 76 年是对的(约 38%)。改为内嵌逐年表换算真实日期,
超出 1900-2100 返回 null 明确放弃,不退化成近似值。
兼容 3.2.17 及以前勾过的 '04-04' 键,升级后勾选不会被静默丢弃。
2. 主题内实现 [TOC]
文章里写 [TOC],该位置输出本文目录,点击跳到对应标题。
在 the_content 优先级 9 处理(早于 wpautop 10 / do_shortcode 11),
保证"补 id"与"扫目录"用的是同一份文本,href 与 id 必然对得上。
嵌套用深度归一化,h1→h3 跳级不会算错层级。
scroll-margin-top 声明式让位,原生锚点/外部 #hash/后退全都生效。
3. 重建评论区
旧实现的问题:列表渲染与 AJAX 渲染各写一份 HTML,已经分叉
(AJAX 返回的新评论没有回复按钮);<li> 被 <div> 包着,嵌套回复错位。
现在统一到 yang_comment_html() 单一渲染函数,列表与 AJAX 只差一个
is-new 类。同时修掉三处真实缺陷:
· 评论项用 flex 会把 <ol class="yang-children"> 当成第三个 flex 项,
子评论跑到父评论右侧、正文被挤到 156px、页面横向溢出 75px —— 改 grid
· 成功提示在 exitReplyMode() 之前设置,被其末尾的 setStatus('','')
擦掉,用户提交成功却看不到反馈 —— 调整顺序
· 窄屏媒体查询打不过深层选择器(媒体查询不增加特异性),
嵌套头像反向变大 —— 补深层覆盖
与 wpDiscuz 解耦:邮件模块不再无条件 return false(那等于永久关掉
notify_postauthor 且不报错);插件在场时不加载主题评论资源,
避免双份表单互抢。
验证:PHP 语法 73/73;_static_qingming 36、_test_toc 53、
_test_comments 62、_test_comments_falsify 17、
_toc_geometry 121、_toc_geometry_falsify 9、
_comments_geometry 98、_comments_geometry_falsify 23,全部 0 失败。
线上端到端 29/0(真实文章渲染目录 + 真实评论数据渲染)。
This commit is contained in:
+39
-7
@@ -94,6 +94,30 @@ if (!function_exists('yang_opt_mourning_extra_raw')) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 今年清明的月日,给后台说明文字用(如「4 月 5 日」)
|
||||
*
|
||||
* 换算不出来(超出年份表范围)时返回一句明确的说明,
|
||||
* **不要**退化成「4 月 4 日」—— 那正是用户要求删掉的近似值。
|
||||
*/
|
||||
if (!function_exists('yang_opt_qingming_label')) {
|
||||
function yang_opt_qingming_label()
|
||||
{
|
||||
if (!function_exists('yang_qingming_md')) {
|
||||
return __('换算不可用', 'kratos');
|
||||
}
|
||||
$md = yang_qingming_md();
|
||||
if ($md === null) {
|
||||
return sprintf(
|
||||
__('今年(%s 年)超出可换算范围,清明不会自动生效', 'kratos'),
|
||||
current_time('Y')
|
||||
);
|
||||
}
|
||||
list($mo, $da) = explode('-', $md);
|
||||
return sprintf(__('%d 月 %d 日', 'kratos'), (int) $mo, (int) $da);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义 CSS 的默认值(来自 inc/theme-custom-code.php)
|
||||
*
|
||||
@@ -467,26 +491,34 @@ function kratos_options()
|
||||
// 把内置清单转成 multicheck 需要的格式
|
||||
$rip_legal = array();
|
||||
$rip_custom = array();
|
||||
foreach (yang_opt_mourning_presets() as $md => $info) {
|
||||
foreach (yang_opt_mourning_presets() as $key => $info) {
|
||||
/* 键有两种:静态日期(`09-03`)和动态日期(`qingming`)。
|
||||
动态日期的键是内部标识,不能直接摆在用户面前 ——
|
||||
所以看 key_label,没有就回退到键本身(静态日期就是 MM-DD,
|
||||
显示出来正好是用户认得的日期)。 */
|
||||
$label = isset($info['key_label']) ? $info['key_label'] : $key;
|
||||
$entry = array(
|
||||
'name' => $md . ' ' . $info['name'],
|
||||
'name' => $label . ' ' . $info['name'],
|
||||
'note' => $info['note'],
|
||||
);
|
||||
if (isset($info['group']) && $info['group'] === 'legal') {
|
||||
$rip_legal[$md] = $entry;
|
||||
$rip_legal[$key] = $entry;
|
||||
} else {
|
||||
$rip_custom[$md] = $entry;
|
||||
$rip_custom[$key] = $entry;
|
||||
}
|
||||
}
|
||||
|
||||
$rip_default = array();
|
||||
foreach (yang_opt_mourning_presets() as $md => $info) {
|
||||
$rip_default[$md] = !empty($info['default']) ? 1 : 0;
|
||||
foreach (yang_opt_mourning_presets() as $key => $info) {
|
||||
$rip_default[$key] = !empty($info['default']) ? 1 : 0;
|
||||
}
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('纪念日清单', 'kratos'),
|
||||
'desc' => __('勾选需要自动黑白的日期。<b>默认一个都不勾</b>,请按自己的意愿挑选。前三个是法定纪念日,后面几个是民间通行做法。日期按站点时区判断,只比对月和日,每年循环。', 'kratos'),
|
||||
'desc' => sprintf(
|
||||
__('勾选需要自动黑白的日期。<b>默认一个都不勾</b>,请按自己的意愿挑选。前三个是法定纪念日,后面几个是民间通行做法。日期按站点时区判断,只比对月和日,每年循环。<br><b>清明节</b>是节气,日期每年浮动(4 月 4~6 日之间),已脱离固定日期、按天文历逐年换算 —— 今年是 <b>%s</b>。', 'kratos'),
|
||||
esc_html(yang_opt_qingming_label())
|
||||
),
|
||||
'id' => 'g_rip_days',
|
||||
'std' => $rip_default,
|
||||
'type' => 'multicheck',
|
||||
|
||||
Reference in New Issue
Block a user