DuetG Blog

Keep It Simple, Stupid

标签: wordpress

  • 给WordPress双重身份验证增加应用程序密码支持

    给WordPress双重身份验证增加应用程序密码支持

    2020年底发布的Wordpress5.6增加了应用程序密码(Application Passwords)功能,这个功能是建立在整合Application Passwords插件代码的基础上的。

    事实上Wordpress官方GitHub账号上还有一款双重身份验证插件,也就是Two-Factor插件。尽管在Wordpress.org的插件库里,这款插件的作者既没有写作官方商业插件的Automattic,也没写作开源插件的WordPress Contributors,而是写为Plugin Contributors。但鉴于它的代码在官方GitHub账号上托管的身份,它无疑算是官方的两步验证插件。只是这款插件已经发布了这么久,并没有见官方像应用程序密码一样把它的代码整合进核心代码。也不知道是不是为了给其他第三方商业两步验证插件留条生路。

    本着简单免费的原则,我还是选择了官方身份的这款免费插件。不过用了之后发现了些小问题——这款插件直接对已经开启了两步验证的账号禁用了API登录的请求。这导致我的IFTTT没有办法再和Wordpress互动。这是Two-Factor默认的设置,倒也不是bug,只不过它并没有给一个能处理的用户界面来修改。

    最终的解决方案是Application Passwords的作者在GitHub上给出来的,不过也只是一段代码,而非是增加一个用户界面选项。

    add_filter( 'two_factor_user_api_login_enable', function( $enable ) {
        // Allow API login when using an application password even with 2fa enabled.
        if ( did_action( 'application_password_did_authenticate' ) ) {
            return true;
        }
    
        return $enable;
    } );

    在Wordpress.org上插件库里,Application Passwords的介绍中也有这段代码的描述,只不过任何人都没有将它做成一个用户界面选项。然而Application Passwords的代码已经整合进了Wordpress核心代码里,以后恐怕也不太有可能看到有这个选项了,毕竟它本来就是Two-Factor的功能。

    把这段代码粘到主题的functions.php里就可以了。不过如果嫌麻烦,我也做了一个简单的插件,直接下载安装激活就可以了(本身就还是这段代码)。

  • 使用WebP Cloud Services将Gravatar头像替换为WebP格式

    使用WebP Cloud Services将Gravatar头像替换为WebP格式

    WebP Cloud Services是一个创业服务型公司,提供付费API将图片转换成WebP格式供用户使用。除了收费服务外,他们也有免费账户可供选择体验,并且还提供免费的公共服务:将Gravatar以及GitHub头像转换成WebP格式。

    将头像替换成WebP格式除了能够加快图片加载的速度外,更重要的还是WebP Cloud Services的服务器在大陆范围能够被访问。这样一来就不会再出现直连无法显示头像的问题,加载网站的浏览器进度条也能够立即结束。

    根据官方文档给出的指南,可以在Wordpress主题的 functions.php 最下方添加钩子函数,实现在加载网站的时候将Gravatar的 https://www.gravatar.com/avatar/:hash 转换成他们自己的 https://gravatar.webp.se/avatar/:hash

    代码如下

    function use_webp_public_service($avatar) {
    	$avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "secure.gravatar.com", $avatar);
        $avatar = str_replace("https://secure.gravatar.com", "https://gravatar.webp.se", $avatar);
    	return $avatar;
    }
    add_filter('get_avatar', 'use_webp_public_service');

    由于给主题开了自动更新,所以一开始我选择了使用子主题来增加这个函数,这样就不担心主题更新的时候把修改的内容覆盖掉了。但缺点是假如想换其他的主题,就还要再做一个对应的子主题,这样实在是太麻烦了。

    当然现在Wordpress有允许你执行代码片段的插件(如Code Snippets),但倘若只是为了这一个功能安装如此重量级的插件又觉得有些得不偿失了。于是还是把这个功能做成一个简单的插件来的更方便一些。本身代码也不多,更不需要更新什么,所以也就不选择发布到Wordpress.org了,需要的话可以在下方下载自行安装。

    考虑回头要不注册个免费账户,把Blog的图片也接入WebP Cloud Services吧。

    更新:已经在Blog上启用了。用起来也很简单,GitHub账号登录就可完成注册。官方为Wordpress提供了插件,并且在插件的页面上有详细的使用说明,按图索骥便可完成。如果是想通过Nginx来实现的话,也可以在 server 块中添加用来替换图片地址的代码

    #把yyets.dmesg.app替换为你的原网址,vz4w427.webp.ee替换为webp.se提供给你的代理地址
    location / {
        sub_filter_once off;
        sub_filter_types text/html;
        sub_filter  '<img src="https://yyets.dmesg.app/' '<img src="https://vz4w427.webp.ee/';
        sub_filter  '<img src=https://yyets.dmesg.app/' '<img src=https://vz4w427.webp.ee/';
    
        sub_filter  '<img src="/' '<img src="https://vz4w427.webp.ee/';
    }

    再更新:鉴于官方的Wordpress插件不能加速文章的特色图片(外加自行修改无果),于是找到了WebP Cloud Services后端的开源代码WebP Server Go,自行在服务器上部署,这样一来所有图片就都自动变成WebP了。