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
This commit is contained in:
+19
-1
@@ -357,8 +357,26 @@ function yang_lightbox_content($content)
|
|||||||
$img = $imgs->item(0);
|
$img = $imgs->item(0);
|
||||||
$imgHtml = $doc->saveHTML($img);
|
$imgHtml = $doc->saveHTML($img);
|
||||||
|
|
||||||
// 原图优先从附件 ID 取(最可靠),其次 href 自己
|
/* 原图地址的三级兜底,顺序不能换:
|
||||||
|
* ① 附件 ID → full 尺寸(最可靠:多站点/子目录/换过原图都能对上)
|
||||||
|
* ② <img> 自己带的 data-full / data-large-file / data-orig-file
|
||||||
|
* (很多插件会把原图塞在这些属性里,而 href 反而是缩略图)
|
||||||
|
* ③ 最后才是 href 本身
|
||||||
|
*
|
||||||
|
* 🔴 ② 这一步不能省。有些站点的结构是
|
||||||
|
* `<a href="xxx-300x200.jpg"><img src="xxx-300x200.jpg" data-full="xxx.jpg">`
|
||||||
|
* —— 三处都是缩略图、只有 data-full 里是真原图,且 img 没有
|
||||||
|
* wp-image 类(编辑器之外插入的图常这样)。只做 ①③ 就会
|
||||||
|
* 「点开还是那张小图」,用户会觉得灯箱没作用。
|
||||||
|
* ⚠️ 取到的值必须再验一次「像不像图片」,否则某些插件会在
|
||||||
|
* data-full 里放页面地址。 */
|
||||||
$full = yang_lightbox_full_url(yang_lightbox_attachment_id($imgHtml));
|
$full = yang_lightbox_full_url(yang_lightbox_attachment_id($imgHtml));
|
||||||
|
if ($full === '') {
|
||||||
|
$cand = yang_lightbox_img_src($imgHtml);
|
||||||
|
if ($cand !== '' && yang_lightbox_is_image_url($cand)) {
|
||||||
|
$full = $cand;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ($full === '') {
|
if ($full === '') {
|
||||||
$full = $href;
|
$full = $href;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user