用户线上实测:页面 /blogtime 写 [Archives] 原样输出 <p>[Archives]</p>,
看起来像"短代码没装/被 markdown 插件转义",实际是标签名大小写对不上。
根因(内核证据,wp-includes/shortcodes.php):
· get_shortcode_regex() 用 implode('|', array_map('preg_quote',$tagnames))
拼正则,不做任何大小写归一化
· do_shortcode() 的 preg_match_all('/'.get_shortcode_regex().'/') 没有 i 修饰符
· do_shortcode_tag() 用 $m[2] 精确查 $shortcode_tags
⇒ add_shortcode('archives') 只匹配全小写,[Archives] 完全匹配不上。
线上实测(真实 WP 环境跑 do_shortcode):
[archives] 长度=209239 解析=是
[Archives] 长度=10 解析=否(原样返回)
[ARCHIVES] 长度=10 解析=否(原样返回)
3.2.46 里我写的注释"WP 短代码标签大小写不敏感、内部统一 strtolower"
是错的,这一版一并改正。
改动:
· inc/theme-archives.php
- 同时注册 archives / Archives / ARCHIVES 三种写法
(不为任意混合大小写膨胀正则,[aRcHiVeS] 刻意不支持,已加断言锁住)
- 修短代码签名:$atts, $content, $tag —— 补上中间的 $content
WP 通过 call_user_func($fn, $attr, $content, $tag) 传三个参数,
漏掉 $content 会让 $tag 落到第 2 个形参上,实际收到空串,
shortcode_atts_{$tag} 退化成无主的 shortcode_atts_
- shortcode_atts 第 3 参数改为实际命中的 $tag(原来写死 'archives')
· style.css 版本号 3.2.46 -> 3.2.47
测试也一并修(这才是本轮最值得记的):
· _archives_unit.php 的 add_shortcode 桩原来写了 strtolower($tag),
比真实 WP 宽容 ⇒ 产品坏着、94 条断言全绿。
现在照抄内核不归一化,并新增真实的 do_shortcode 解析实现。
· ⑪ 组从"查注册表有没有 archives 这个键"改成"拿真实写法解析一遍"
· 新增断言:三种写法都渲染出 .yang-archives、
混合大小写原样返回(刻意不支持)、未注册标签原样保留、
shortcode_atts 收到的 tag 恰好是实际命中的那个
· _archives_unit_falsify.py 新增 R5~R8 四条注入:
R5 只注册小写(3.2.46 的错误形态)→ 红 10 条
R6 大写注册指向不存在的回调 → 红 4 条
R7 shortcode_atts 的 tag 写死小写 → 红 2 条
R8 签名去掉中间的 $content → 红 3 条
验证:
2j 评论关闭零输出 通过 54 / 0 失败
2k 评论关闭反向验证 真红 13 / 0 无效
2l 归档单测 通过 109 / 0 失败(原 94,新增 15 条)
2m 归档端到端 通过 109 / 0 失败
2n 归档端到端反向 真红 21 / 0 无效
2o 归档源码级反向 真红 10 / 0 无效(原 6,新增 4 条)
lint 96 个 PHP 文件全过
线上验证(真实 WordPress,不是模拟):
补注册前:只 ["archives"],[Archives] 原样返回
补注册后:["archives","Archives","ARCHIVES"],三种写法长度全是 209239
发布:已推 3.2.47 到 /theme-update/,update.json 已落 3.2.47;
服务器 wp-content/themes/kratos_yang/ 仍为 3.2.46(未覆盖,
等用户在后台点升级)。
14 lines
609 B
CSS
14 lines
609 B
CSS
/*
|
|
Theme Name: Kratos_Yang
|
|
Text Domain: kratos_Yang
|
|
Version: 3.2.47
|
|
Requires PHP: 7.0
|
|
Description: 这是一个Kratos主题的分支版本,用来增加一些定制化功能。
|
|
Tags: 博客, 双栏, 响应式, 自定义背景, 自定义颜色, 自定义图标, 自定义菜单, 特色图像, 收录优化, 邮件中心, 主题选项, 小工具, 文章置顶, 无障碍友好
|
|
Author: Yongquan Yang
|
|
Author URI: https://yangyq.net
|
|
Theme URI: https://code.yangyq.net/laoyang/wordpress-kratos-yang
|
|
License: MIT License
|
|
License URI: https://code.yangyq.net/laoyang/wordpress-kratos-yang/src/branch/main/LICENSE
|
|
*/
|