阅读视图

Argon主题优化 | 将说说添加到RSS

动机

果然读者是第一生产力,自从有友友反馈RSS订阅不到我的脑电波(疯言疯语)后,我就下定了决心解决这个问题,在请教了chatgpt老师后,仅用两个小时就搞定了这个功能,其实很多事情都没有我们想象中的那么困难,只要你起步去做,就会发现这件事情——半步就走到头了。

方法

废话不多说,直接上代码:

// 将 shuoshuo 类型的帖子加入到 RSS feed 中
function custom_rss_query($query) {
    if ($query->is_feed) {
        $query->set('post_type', array('post', 'shuoshuo')); // 添加 'shuoshuo' 类型
    }
    return $query;
}
add_filter('pre_get_posts', 'custom_rss_query');

// 只在 RSS 中为没有标题的 shuoshuo 自动生成默认标题
function add_default_title_to_rss_shuoshuo($title, $post_id) {
    if (is_feed()) {  // 检查是否是 RSS feed
        $post_type = get_post_type($post_id);
        
        if ($post_type == 'shuoshuo' && $title == '') {
            return '脑电波'; // 只在 RSS 中为无标题的说说设置默认标题
        }
    }
    
    return $title;
}
add_filter('the_title', 'add_default_title_to_rss_shuoshuo', 10, 2);

这个代码写在哪呢?可以写在主题的functions.php里,但是考虑到可能存在的更新覆盖(虽然主题大大已经停更很久了),我还是强烈安利你写在Snippets这个插件里,这个插件可以更直观清晰地管理附加代码,包括PHP、HTML、CSS、JavaScript等都能写。我也是今年才发现这个好东西,如果早点知道还能这么操作可能就不会去自己做插件了哈哈。

保存成功后可以去feed页面查看一下是否添加成功,比如我的订阅地址是https://crowya.com/feed

注意如果要在手机RSS阅读器里看到效果,可能需要清除一下缓存,WP Super Cache或者Autoptimize的缓存都清除一下试试,之前的评论验证码bug极有可能就是Autoptimize缓存未更新的问题。

如果你的RSS只显示10条内容,可以在WordPress自带设置里修改。

如果你好奇我的RSS结尾信息是怎么添加的,那是因为Yoast SEO刚好有这个设置我就用上了哈。

最后推荐一个安卓端的RSS阅读器:Read You,颜值还怪好看的哈,功能也简洁,对标的应该是iOS的Reader,最重要的还是免费开源。之前的inoreader为啥不用了?全平台还是香的,但是我发现它是在线更新,文章获取频率是固定的,没法第一时间手动刷新,对于我们这种需要实时调试的博主来说就有点鸡肋了,而Read You就只是单纯地从本地获取服务器内容,离线阅读器,随时都可以手动更新。

不过测试的时候最好清空一下所有文章哈,有可能他发现本地存过某篇文章就跳过更新了,这样有些标题可能还是旧的。

就酱紫吧,终于在中秋假期拔掉了这个flag,祝大家中秋节快乐!

本文发表于鸦鸦的巢穴,感谢您的订阅!如需评论请前往Argon主题优化 | 将说说添加到RSS

  •  

页面加载速度优化指南

前言

从建站至今一直没有优化过网站访问速度,也有小伙伴反映过我的页面加载速度奇慢,我也是知道的,然而懒癌发作一直都没有行动,还有什么SEO呀我也是佛系对待,纯属摆烂。直到最近才重新审视这个问题。

如何测速

上面两个都是谷歌家的,生成的报告内容也基本一模一样,区别在于前者是在别的地方模拟访问,后者是你自己的网络环境。

指标最好的一次报告,每次测试相差较大。

测速完成后还会给出很多优化建议,很有参考价值,按照它说的做也能提升不少。

太复杂的操作我也不会,最近小小地折腾了一下,目前了解到的影响访问速度的三大因素是:缓存、CDN、异步或延迟加载JS。

缓存

缓存据说是影响最大、见效最快的因素。

 为什么缓存能加快访问速度?
主要是节省了服务器执行PHP这一步骤。需要执行PHP的是动态页面,不需要执行代码的就是静态页面,静态比动态快。

我目前使用的缓存插件有:

  • WP Super Cache(WordPress插件,页面缓存,存至硬盘)
  • Autoptimize(WordPress插件,JS/CSS压缩和缓存,存至硬盘)
  • 堡塔网站加速(宝塔面板应用,据说和memcached效果差不多,存至内存)
  • opcache(宝塔面板PHP扩展,据说用于加速PHP脚本)

服务器也是一台计算机,理论上内存的读取速度比硬盘快,那么缓存到内存可能比缓存到硬盘快。

WP Super Cache

WP Super Cache的设置我参考了Bensz的这篇教程:Docker系列 WordPress系列 缓存插件WP Super Cache

Autoptimize

Autoptimize的设置不要瞎启用,可能会对主题功能造成一定影响,如果遇到问题,排查到那个设置项然后关闭,其他的只要开着没影响就打开好了。

这个插件起效后查看网页源代码应该是像这样谁也看不懂的压缩后的鬼画符。

堡塔网站加速

这个设置超简单的,点击配置向导选择WordPress专属规则就OK了。

opcache

这个好像不需要设置,在PHP的设置-安装拓展里装上就好了。

CDN

Content Delivery Network,内容分发网络,这个好理解,如果你不用CDN,所有内容都从你自己服务器上传输,压力很大,如果能从多个源头同时获取数据,效率就快了。而且CDN貌似能根据用户网络位置就近分发数据,就好比你网购时总是从最近的仓库发货。

东市买骏马,西市买鞍鞯,南市买辔头,北市买长鞭。

考虑到这一点后,我把站点图标、背景之类的图片以及字体统统上传到OSS了,OSS配置了CDN加速。关于字体这里好像有个小坑,涉及到跨域传输,需要在阿里云设置一下,具体过程我忘记了,根据提示操作就行了。

其他的CDN平台也有,比如很常见的jsDelivr,配合GitHub使用就是免费的CDN,而且不需要任何配置,所有GitHub资源都可以通过https://cdn.jsdelivr.net/gh/用户名/仓库名/路径/文件名直接引用!具体案例可参考这里。怪不得大家都喜欢上传到GitHub,原来配合CDN之后理论上可以当网盘用。

另外,有一些使用率很高的公共库,比如MathJax,有很多现成的CDN,比如BootCDN,可以在这里面搜。其实Argon的主题资源、数学公式也是引用了CDN。

异步或延迟加载JS

页面加载速度里面,JS的加载和执行一般占了大头,因为很多臃肿、花俏、华而不实的东西都是通过JS实现的,而这些东西往往放在页尾脚本里,等到页面加载完再执行,起到锦上添花的作用。

主题的JS有些功能是必备的,一般予以排除。但是有些不太重要的JS可能没有设置异步,就必须执行完再加载后续页面,会造成阻塞。这里主要涉及async和defer两个概念,区别见下图[25]

async和defer的区别

那具体怎么优化呢?我直接用的Async JavaScript插件。这个插件作者和Autoptimize的作者是同一人。虽然插件名字叫Async,但async和defer两种功能都有,可以自己选,我试了下感觉区别不大,可能是因为很多JS本身就声明了async,优化空间不大,具体选哪种随缘,唯一需要注意的是设置里应排除Argon主题,否则有些功能加载不正常,比如左侧栏目录。

值得注意的是,这种方法并没有减少未使用的JavaScript,只是优化了时间顺序,具体如何减少未使用的JavaScript或CSS,甚至按需加载,笔者并没有研究。但按照谷歌测速的报告来看,如果能实现Tex公式的按需加载,应该还能节省一大笔时间。

小结

在缓存、CDN、异步或延迟加载JS这三大因素里,我感觉最有用的还是缓存,因为CDN你本来就或多或少有意识或无意识地在引用,另外很多JS的作者本来就预先声明了async,所以优化空间有限,但缓存真的是从0到1的质变,你自己不搞没人能帮你优化。我之前访问速度超级慢就是完全没设置缓存这些东西,今儿才算搞懂了它的作用。

本文发表于鸦鸦的巢穴,感谢您的订阅!如需评论请前往页面加载速度优化指南

  •  

教程 | 将博客朋友圈化——仅展示最近一个月动态

前言

心心念念这个功能好久了,也向主题作者提过需求,不过可能是太小众了,作者大大应该是没有考虑。

那就只好自己动手啦,不过拖延症晚期,趁这段时间板子投出去了有点空闲,终于把这个功能折腾出来了。

本着能用插件就绝不自己写代码的原则,本教程都是傻瓜式操作。

工具

  • Telegram
  • IFTTT
  • IFTTT Post Formats & Post Types(WordPress插件)
  • PublishPress Future(WordPress插件)

思路

首先说明一下,这些动态都是基于Argon主题自带的“说说”这一帖子类型(Post Type)存在的,只不过我把“说说”标题改成“脑电波”了,标题是通过JavaScript覆盖的,但这种做法确实不太优雅,还是希望作者大大提供一个自定义标题的设置。所以,脑电波和文章是互不干扰的,只有脑电波是一个月可见,文章还是永久可见。当然,也不一定是一个月,到期时间可以视需求而定。

在手机聊天框发送动态

另一个方面是操作的便捷性,要想获得发朋友圈那样的丝滑体验,WordPress网页版恐怕是无法差强人意的。尤其是在手机上使用WordPress,就更难操作了。解决的方法当然是连接现有app,像发推一样或者聊天一样发送动态。当下最流行的app当然是Telegram和Twitter,Telegram本身有自动删除功能,Twitter好像得开会员吧,而且Twitter限字数。我这里选择的是Telegram,当然你也可以用Twitter,原理是差不多的。

配置自动转发

那么怎么把Telegram连接到WordPress呢?这就用到IFTTT(If This, Then That)了,可以理解为自动触发机器人,它有网页版也有APP,只要设置好就可以不管了,卸了也没关系。免费版bot数量有限,但已经够用了。

唯一需要注意的是右图Categories的填写,务必写为ifttt-posttype-{shuoshuo},因为IFTTT只能以文章的形式转发到博客,需要通过IFTTT Post Formats & Post Types这个插件转换成脑电波类型。

上面的规则只接受文本触发,如果要发送图片需要另外配置一条规则,原理类似,不再赘述。

强迫症额外处理

这样设置完之后应该能从Telegram正常发布到WordPress了,但是每次触发会残留一个名为ifttt-posttype-{shuoshuo}的分类名称,如下图,强迫症看了肯定难受。

好在插件作者也想到了这一点,为我们预留了一个过滤器,不过需要手动将下面的代码添加到主题的functions.php或自建的mu-plugin中。

<?php add_filter( 'ifttt_pfpt_delete_ifttt_cats', '__return_true' ); ?>

添加到主题的functions.php是一种不太优雅的方法,因为每次更新主题都需要重新添加,而自建mu-plugin是一种一劳永逸的方法。我也是最近才听说mu-plugin这个东西,之前只知道用JavaScript修改是一劳永逸的,现在PHP也可以一劳永逸了,而且似乎更优雅,只不过需要自建插件,而且在宝塔面板里编辑。

不要听到“自建插件”就吓跑了,别的插件我不知道,这个插件还是很容易的,它是个全文只有一行代码的.php文件,你可以把它命名为myplugin.php,放在mu-plugins这个文件夹下面就行,mu-plugins文件夹需要自己新建,它的路径是/www/wwwroot/wordpress/wp-content/mu-plugins,如图。

现在你把ifttt-posttype-{shuoshuo}这个分类删掉就再也不会出现了。

设置期限

接下来才是本文的重点,那就是到期自动隐藏。试了很多款插件,PublishPress Future最合适,尽管也有一些bug,但无关痛痒,和我一样设置就行,踩过的坑我在图里都标出了。

设置完简单测试一下基本就大功告成啦!如果你要排查问题,可能会用到下面这个页面。

分隔提示

建议在最后设置一条永不过期的脑电波提示一下到底了。

那么本教程到这里就结束了,现在可以愉快地发脑电波了~

本文发表于鸦鸦的巢穴,感谢您的订阅!如需评论请前往教程 | 将博客朋友圈化——仅展示最近一个月动态

  •