关于 Wordpress 外链问题,我一直使用 BWP External Links 处理,功能很强大,但是并不能满足我的全部需求。比如在排除列表方面,这款插件只能选择忽略一些或者全部子域名,但是我想有些站外域名也被排除掉就无法实现。这个问题之前已经写过一篇文章解决了,不再赘述。
想起 修改Wordpress插件的技巧 这个话题,是因为今天又动了一下 BWP External Links,因为一些原因我希望给所有的链接在跳转时进行 Base64 加密,在一个中间页进行解密并判断。插件本身提供了给所有站外域名添加前缀的功能,但是不支持对链接进行加密,所以需要修改。
因为我不喜欢用 Wordpress 后台的插件修改功能(这也给后来发生的问题买下来伏笔),所以直接用 FTP 进到 plugins 目录里编辑 class-bwp-external-links.php 文件,大约在 1071 行是关于添加前缀的,源代码如下:
if (!$is_local && $external_prefix)
$new_link = preg_replace(‘/href=(?:”|’)([^”‘]*)(?:”|’)/iu’, ‘href=”‘ . $external_prefix . ‘$1”‘, $new_link);
我们希望把匹配出来的结果进行加密后再进行替换,所以 preg_replace 是无法实现的,需要用到 preg_replace_callback,具体修改方法不再赘述。
最好的修改Wordpress插件的方法(不考虑在 Wordpress 后台修改)是:先停止使用插件,然后编辑插件文件,最后尝试重新启用。
这样如果插件本身有 BUG,Wordpress 会阻止插件启用,这样就避免了插件的 BUG 带来的问题。