WordPress搜索所有unlinked images

WARNING: This article may be obsolete
This post was published in 2020-11-27. Obviously, expired content is less useful to users if it has already pasted its expiration date.

https://github.com/WordPress/gutenberg/issues/8663

参考本博客之前的一篇文章:Lightbox插件:Meow Lightbox,文章里提到了,对插件市场上绝大部分的lightbox插件而言,必须设置“Link to media file”才能让插件对图片生效。

然而Gutenberg Editor很不给面子,在image-size、link-to等诸多图片设置上很不让人省心,需要编辑人员对每一张图片逐一手工设置。有的时候图片一多就很容易忘记link to media file这个操作,博客站点里就出现了lightbox失效的图片。

凭第一直觉,可以先写出一个非常简陋的寻找这些“异类”图片的regex:

wp\:image((?!linkDestination)(?!wp\:image)[\s|\S])*?\/wp:image

但是这个regex并不是100%管用。在进行了某些特殊的操作后(比如先勾选了link to media,然后又取消了勾选),会出现 linkDestination:no 这样的代码,这个正则就不起作用了。

目前来看,挑选出 <a href="xxxxx"> 可能是一个更好的选择:

先获取wp:image block:

wp:image((?!wp:image)[\s|\S])*?\/wp:image

对得到的wp:image区块再进行一次判断:

<a href=

没有匹配到结果的就是没有设置link to media的图片。

有的时候因为操作出了问题,虽然设置了link to media,但是指向的图片并不是原图(example.png),而是一个裁剪过的图片(比如example-150x150.png),会导致“查看高清图片反而变模糊”的问题。

对之前获取的wp:image block可以进行一个额外的判断:

<a href="((?!")[\s|\S])+\d+x\d+((?!")[\s|\S])+">

匹配到结果的就是“指向出现问题”的图片。


可供使用的环境:

1,pure SQL:

我只能想到一种方法:修改这个regex,使其符合mysql POSIX规则。(写起来很复杂)

2,not-pure-SQL:

任意一种语言(比如php)用于连接mysql,过滤出所有公开发表的post、page:

select id, post_title, post_name, post_content from wp_posts where post_status='publish'
  and (post_type = 'post' or post_type = 'page');

获取wp-content以后使用regex进行匹配,找到符合条件的post_id用于后续修改。


 Last Modified in 2023-01-22 


Leave a Comment Anonymous comment is allowed / 允许匿名评论