Commit Graph
2 Commits
Author SHA1 Message Date
laoyang 1cf4267c18 fix(lightbox): 无附件 ID 的图片改用 img 的 data-full 作原图兜底
3.2.40 初版把「原图地址」只做了两级兜底:附件 ID → href。
`yang_lightbox_img_src()`(读 data-full / data-large-file /
data-orig-file)当时是**定义了但没人调用**的死代码,等于白写。

后果是这一类结构取不到原图:

    <a href="xxx-300x200.png"><img src="xxx-300x200.png" data-full="xxx.png">

三处都是缩略图,只有 data-full 里是真原图,且 img 没有 wp-image 类
—— 编辑器之外插入的图、部分插件输出的图常是这种形态。用户点开
看到的还是那张小图,会认为灯箱根本没起作用。

改成三级兜底:附件 ID → img 上的 data-full 等属性 → href。
第二级取到的值必须再过一次「像不像图片」,因为有些插件会在
data-full 里放页面地址,不验就会让灯箱加载出一个 HTML 页面。

守卫补在服务端探针 B2 段(4 条,直接看输出里的 href,不看函数里
有没有出现那个字符串),并新增两条反向注入:
S12 砍掉第二级兜底、S13 去掉图片校验。同时更新 S2 的注入锚点 ——
它原来只删第一级,会被第二级救回来,注入等于没做。

Refs #10
2026-10-25 22:17:45 +08:00
laoyang 7125fdd3ce feat(lightbox): 正文图片点击在当前页放大、多图轮播、键盘切换
新增主题自带的图片灯箱,替代「点图片跳新标签页」的旧行为,
不再依赖第三方灯箱插件。

主要能力
· 正文里的图片链接改写成「在当前页覆盖展示原图」,不跳转
· 原图优先按附件 ID 取 full size(wp_get_attachment_image_src),
  取不到才退回 href 自己 —— 不在前端从缩略图文件名反推原图地址
· 原图地址写在 href 里而不是 data-full:主题的 CDN 是整页输出缓冲
  改写,只认 src= / href= 与 CSS url(),写 data-* 会绕回源站
· 多图左右箭头轮播(到头循环),键盘 ←↑ / →↓ 切换、Esc 关闭、
  Home / End 跳首尾,点空白关闭,打开时锁滚动并在关闭后归还焦点
· 两套遮罩配色(白色默认 / 深色)与九档不透明度(默认 80%)
· 图片本身始终保持不透明:透明度只作用在遮罩底色上

兼容性处理
· 剥掉第三方灯箱插件留下的触发属性(data-rel / data-imagelightbox /
  data-rl_title 等)。线上实测 100 篇文章 112 张图**全部**带这些属性,
  若只「让给插件」则主题灯箱永不生效;同时关掉开关时一律不动,
  插件可照常工作
· 移除 imgnofollow() 给图片链接加的 target="_blank" 与 rel,
  链接不再承担跳转职责
· 无 JS 时 href 仍在,右键「在新标签页打开图片」照常可用

可读性
· 半透明遮罩下底部说明条自带更实的底(≥0.9),并按「遮罩底下是
  纯黑」的最坏情况验证文字对比度 ≥ 4.5:1
· 行内不透明度样式用 [data-theme] 选择器,避免被样式表默认值压掉
  (裸类名优先级不足,会让深色配色下透明度静默失效)

验证
· 服务端正文改写探针 51 通过 / 0 失败(PHP 8.4 与 8.5)
· 浏览器真实交互探针 200 通过 / 0 失败(两配色 × 80%,含 50%/100%)
· 上述两者的反向验证 21 项注入全部按预期捕获
· 三个改动文件 php -l 通过

Refs #10
2026-10-25 22:05:24 +08:00