我希望为我的网站使用的自定义WordPress插件推出一个bug修复程序。
该插件使用各种属性注册一个短代码。
但是,有一个错误,其中一个属性被错误地调用,因此它永远不会在HTML中呈现。
因为我有很多用户使用这个插件,所以他们可能会在生产页面的短代码中不知不觉地设置了这个属性,这意味着推动修复可能会导致这些页面呈现不正确。
我基本上想运行一个脚本;重置(&Q);将shortcode属性的所有实例设置为默认值(\'\'
, 在这种情况下)。
我希望regex查找以下所有实例:
\\[shortcode_name(.*?)(attribute_name=[\'"]\\S*[\'"])
并将其替换为:
[shortcode_name $1 attribute_name=\'\'
在里面
wp_posts.post_content
我知道早期版本的MySQL(<;8.x)没有本机REGEXP_REPLACE()
功能,所以我希望在MySQL和MariaDB的众多广泛使用版本之间能够兼容。我真的不知道如何使用PHP和/或$wpdb类来实现这一点(或者这是否是一个好主意)。
根据PHPCS的规定,“;PHP系统调用通常被服务器管理员禁用;,所以我不想使用shell_exec()
调用WP-CLI脚本。
最合适的回答,由SO网友:Nicholas Harris 整理而成
wpdb
没有内置的regex replace函数。最简单的解决方案是遍历他们的所有帖子,检查内容中是否有格式错误的短代码,并对帖子内容执行regex替换。它可能没有纯SQL解决方案快,但不太容易出错。当插件的更新版本被激活时,您可以让它运行一次。
您可以使用WP_Query 要遍历所有帖子并检查帖子内容wp_update_post 更改帖子内容。
或者,如果您想确保用户知道所做的更改,您可以检查他们所有的帖子中是否存在格式错误的短代码实例,如果发现任何短代码实例,您可以添加管理员通知,让他们知道需要进行数据库更新。然后,您可以添加一个建议以首先进行备份,并添加一个按钮以进行post更改以自动修复短代码。