普通视图

快速搞定macOS Web环境:PHP+Nginx+MySQL+WordPress 配置指南

作者 老王
2025年12月14日 22:32
因频繁折腾网站易引发线上故障,尝试 MAMP 免费版搭建本地测试环境,却受限于功能单一、数据导入不便及环境差异导致的代码报错问题,遂放弃集成工具,选择在 macOS 系统手动配置 PHP+Nginx+MySQL 环境并部署 WordPress

WordPress插件HTACCESS Manager

2025年11月19日 16:59
AI智能摘要
HTACCESS Manager是一款适用于Apache及LiteSpeed服务器的WordPress插件,旨在安全智能地管理.htaccess文件中的重定向规则。支持强制HTTPS、WWW与根域名互跳、二级域名配置,并自动生成优化规则,兼容多种环境且不影响其他插件规则。提供手动复制、自动更新与安全移除功能,确保规则准确生效。需注意备份.htaccess文件,不适用于Nginx服务器。
— 此摘要由AI分析文章内容生成,仅供参考。

我写这个插件的目的,就是为了不去手动直接编辑.htaccess文件。

本插件适用于Apache、LiteSpeed(含OpenLiteSpeed和LiteSpeed Enterprise)服务器,也适用于其他兼容Apache规则的服务器。

以下内容为AI通过阅读源代码后生成,并经本人细致修改。


HTACCESS Manager

一个专业的WordPress插件,用于智能管理.htaccess文件中的重定向规则。支持HTTPS强制重定向、WWW与根域名跳转配置,以及二级域名站点支持。

功能特点

🔒 强制HTTPS重定向

  • 自动将所有HTTP请求重定向到HTTPS
  • 确保网站安全连接

🌐 灵活的域名跳转配置

  • WWW跳转到根域名www.example.comexample.com
  • 根域名跳转到WWWexample.comwww.example.com
  • 自由选择跳转方向

🏷️ 二级域名支持

  • 专门针对二级域名站点的优化配置
  • 启用后只强制HTTPS,不处理WWW跳转

⚡ 智能规则管理

  • 自动生成优化的.htaccess规则
  • 不干扰其他插件的现有规则
  • 安全的规则添加和移除机制

🛡️ 安全可靠

  • Must-use插件支持,确保高可靠性
  • 精确的规则匹配,避免误删其他配置
  • 完整的卸载清理机制

安装方法

方法一:手动安装

  1. 下载插件ZIP文件
  2. 在WordPress后台进入【插件】→【安装插件】→【上传插件】
  3. 选择ZIP文件并上传
  4. 激活插件

方法二:FTP安装

  1. 解压插件文件到 wp-content/plugins/htaccess-manager/
  2. 在WordPress后台【插件】页面激活”HTACCESS Manager”

使用方法

基本配置

  1. 进入【设置】→【HTACCESS 管理】
  2. 根据您的需求配置选项:
    • 是否为二级域名:如果使用类似 sub.domain.com 的地址请启用
    • 重定向类型:选择WWW与根域名的跳转方向
    • 自动更新:启用后设置更改时自动更新.htaccess文件

配置示例

场景1:主域名站点,WWW跳转到根域名

www.example.com → example.com
http → https

配置:

  • 是否为二级域名:❌ 否
  • 重定向类型:✅ WWW跳转到根域名

场景2:主域名站点,根域名跳转到WWW

example.com → www.example.com
http → https

配置:

  • 是否为二级域名:❌ 否
  • 重定向类型:✅ 根域名跳转到WWW

场景3:二级域名站点

sub.example.com → https://sub.example.com
(不处理WWW跳转)

配置:

  • 是否为二级域名:✅ 是
  • 重定向类型:自动禁用

手动操作

  • 复制规则:手动复制生成的规则到.htaccess文件
  • 手动更新:强制更新.htaccess文件
  • 移除规则:安全移除所有本插件添加的规则

生成的规则示例

WWW跳转到根域名 + HTTPS

# BEGIN HTACCESS Manager
RewriteEngine On

# 同时处理 HTTPS 和 WWW 重定向
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
# END HTACCESS Manager

二级域名 + 只强制HTTPS

# BEGIN HTACCESS Manager
RewriteEngine On

# 强制HTTPS重定向(二级域名)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# END HTACCESS Manager

兼容性

测试环境

  • ✅ WordPress 5.0+
  • ✅ PHP 7.4+
  • ✅ Apache 2.4+
  • ✅ LiteSpeed(含OpenLiteSpeed和LiteSpeed Enterprise)服务器
  • ✅ 多站点网络

插件兼容

  • ✅ 与大多数缓存插件兼容
  • ✅ 与安全插件兼容
  • ✅ 不影响其他.htaccess规则生成插件

故障排除

常见问题

Q: 插件激活后网站出现重定向循环? A: 检查服务器是否已配置SSL证书,或尝试清除浏览器缓存。

Q: .htaccess文件无法写入? A: 确保.htaccess文件权限设置为644,或使用手动复制功能。

Q: 规则没有生效? A: 确认服务器支持mod_rewrite模块,检查Apache配置。如果是OpenLiteSpeed服务器,可能需要重启OpenLiteSpeed服务。

Q: 如何恢复默认设置? A: 停用并重新激活插件,或使用”移除规则”功能。

日志检查

如果遇到问题,请检查:

  1. WordPress调试日志
  2. 服务器错误日志
  3. .htaccess语法验证

开发者信息

文件结构

htaccess-manager/
├── htaccess-manager.php     # 主插件文件
├── readme.md                 # 说明文档
└── (自动生成)
  └── mu-plugins/
      └── htaccess-helper.php # Must-use插件

钩子函数

插件提供以下WordPress钩子:

  • htaccess_manager_before_update – 规则更新前
  • htaccess_manager_after_update – 规则更新后

自定义开发

如需扩展功能,可参考插件中的规则生成逻辑:

$manager = new HTACCESS_Manager();
$rules = $manager->generate_htaccess_rules();

版本历史

v1.0.2 (当前版本)

  • 增强规则移除安全性
  • 改进空行处理
  • 优化MU插件逻辑

v1.0.1

  • 修复规则冲突问题
  • 添加内容预览功能
  • 改进用户界面

v1.0.0

  • 初始发布
  • 基础重定向功能
  • Must-use插件支持

技术支持

如果您遇到问题或需要帮助,请:

  1. 查看README文档
  2. 检查WordPress错误日志
  3. 联系服务器管理员确认Apache配置

许可证

GPL v2或更高版本

贡献

欢迎提交Issue和Pull Request来帮助改进这个插件。

注意:(1)在使用本插件前,请务必备份您的.htaccess文件。

(2)本插件不适用于Nginx服务器。


下载地址

点击下载或将以下链接复制到浏览器地址栏并敲击回车键:

https://git.localhost.observer/linhaicaoyuan/htaccess-manager

进阶之好物3.0版本

作者 叶子
2025年10月30日 12:31

许久未更新了,这几天抽空将好物插件的后台进行了优化升级,本次升级主要针对插件后台管理方面

3.0版本升级功能如下:

1、增加了好物的xml格式的导入导出功能。

2、增加了好物的批量删除功能

3、重构了整个好物功能的代码,减少冗余代码,增加代码的可维护性、可读性、以及复用性。

4、将好物列表后台卡片化设计

5、调整了排序,根据填写的入手时间早晚来自动排序。

6、评分机制从复选框改为下拉式选项框

7、优化修复多处bug

8、好物功能的后台Ui进行了多方面升级焕新,更符合现代化,并做好响应式设计。

9、这次更新优化内容点太多,就不一一描述

部分截图展示如下:

进阶之好物3.0版本
列表页面
进阶之好物3.0版本
批量删除
进阶之好物3.0版本
增加修改好物页面

网站那点事儿

作者 老王
2025年10月20日 23:23
最近对网站做了次"断舍离":将零散的说说整理成正式文章,修复了足迹和RSS页面的技术问题。最开心的是为小王子制作了线上同学录,永久珍藏童年笔迹。还为友链添加了RSS订阅,方便关注朋友动态。特别感谢小威帮忙解决了评论等级问题,从此不再受WP更新困扰。

【去过】页面上线

作者 大致
2025年9月12日 09:40

最终效果见这里

我这个人既不喜欢旅游,也不喜欢摄影,没出过国也没在国内溜达过几个地方,但这并不妨碍我也有一颗上线足迹地图的心。无奈谷歌地图连不上,百度地图不想连,OSM(OpenStreetMap)既连不上也连不明白,就搁置了。
直到上周,@Dayu上线了他的地图插件,试用之后发现表现形式与期待值有差距,想在帖子下面留言发建议的时候,发现了明明同学的另一份方案。虽然主要是js实现的,只需要知道leaflet这个开源库的名字,我就知道以Wordpress的海量扩展,这回成了!

找到了一个插件和插件的插件,配置之后,算是达到了心目中的效果。
插件使用比较复杂,这里记录一下,给自己个备忘,能帮到人更好。

插件Leaflet Map的配置

插件地址:Leaflet Map
逐一说明一下后台的配置项:
Default Latitude
地图默认纬度
Default Longitude
地图默认经度
Default Zoom
地图默认缩放比
Default Height
默认高度
Default Width
默认宽度
上面五个值可以以短代码参数的形式加到leaflet-map中,如果不加则使用后台的默认参。

Fit Bounds
是否令地图随标记点的范围进行缩放。如果为true,那么地图会自动计算当前所有Marker的中心位置,以及包括所有Marker点的合适的缩放比。可以用默认值,也可以在map中单独设置。

Show Zoom Controls
是否显示缩放按钮

Scroll Wheel Zoom
是否允许滚轮缩放
这项设置之后,在地图上并不是直接用滚轮缩放,而是需要用Ctrl,感觉不便所以我自己没加。

Double Click Zoom
是否允许双击放大
注意如果不显示缩放按钮的话,放大之后就回不来了。

Default Min/Max Zoom
最小和最大放大倍数。最终的放大倍数不仅跟这个后台设定项有关,也跟使用的地图瓦片API有关。

Default Tiling Service
有两个选项,“I will provide my own map tile URL”和MapQuest。MapQuest我考察了一番,感觉太难看,没继续尝试。所以重点说第一个选项,自定义tile URL。
先解释一下什么是tile URL。本插件所依赖的地图服务,叫做Map Tile Server(地图瓦片服务)。它分成Raster、Vector和Static三种形式。本插件使用的是Raster形式,而Dayu和明明同学用的都是Vector形式。Vector的参数更加丰富,Raster配置起来更简便。

※※※Map Tile URL※※※
重中之重!!因为默认的OSM服务访问不了,所以这里必须填一个自定义的。
明明同学找的cartocdn就挺好用的。他使用的light_nolabels是不带标签的版本,换成light_all就是带标签的版本。至于他为什么用不带标签的,自己悟。

https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png
http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png

这里的{z}{x}{y}都不要动,第一个{s}是指地址里的subdomain,也就是接下来的配置项【Map Tile URL Subdomains】。
有的API是需要API Key的。这样的API都有说明文档,把Key按照人家给的例子粘贴进来即可。
cartocdn对我来说有点太素了,于是周末花了一天时间寻找能用的瓦片服务,结果惨不忍睹,汇报一下成果:
maptiler.com:要注册、被墙。
opentopomap.org:免注册、丑。
stadiamaps.com:要注册、比较流畅、免费用户限流严重
tomtom.com:要注册、慢、地图不详细
here.com:要注册、中文地名乱七八糟
geoapify.com:要注册、速度尚可、账号登录验证需要梯子,服务本身不需要。
至于为啥不找国内的地图服务,是我不想吗?本插件所支持的是Raster服务,也叫zxy服务,客户端GET的结果必须是一张PNG/JPG/WEBP图片。国产的高德和天地图我也试了,根本不是一样的格式。甚至有种说法,说国内不允许提供这种服务。
然后呢,这服务也可以自己搭建,数据和教程也都有,但总觉得这种行为像为了吃顿酱肘子先花一年时间晒酱油,没必要。
兜兜转转一圈,还是要回到cartocdn。什么功不唐捐,屁咧!

Map Tile URL Subdomains
具体填什么要看API的文档说明,像openstreetmap和cartocdn都是abcde或a,b,c,d,e。有的API前面没有前缀那就不填。

Detect Retina
是否检测高清设备。如果上面的瓦片服务中支持@2x,那么选中这项以后,如果leaflet发现使用者用的是高清屏幕,就会自动使用高清地图。窃以为意义不大。

Tile Size
一般情况下服务本身已经设好了,留空即可。

Tile Id
Access Token
用Mapbox的服务才有用。但是我的Mapbox没配明白,只有一个默认的卫星地图能用,这两项也没用上。

Zoom Offset
好像是在zoom的时候自动加减一下这个值,没理解意义。

No Wrap (tiles)
地图是否与经线对齐。(这有啥用?)

JavaScript URLCSS URL
css和js的位置,默认即可。

Default Attribution
地图做成后,右下角的一串版权信息。尊重服务商要求即可。

再往后没用上。
插件装好后,其实已经可以编辑地图了。但因为还有个插件的插件,所以怎么用放后面再说。

插件Extensions for Leaflet Map的配置

插件地址:Extensions for Leaflet Map
跟主插件正相反,这个插件的后台,大多数时间在说怎么用。

Marker Clustering–When you mouse over a cluster it shows the bounds of its markers.
聚合显示时,默认会将聚合的标记点连接起来形成一个多边形。我嫌不好看,勾掉了。

When you click a cluster we zoom to its bounds.
点击聚合点时,直接缩放到所有聚合点的范围。

增加一个leaflet map

语法和关键字很多,但能用上的不多。通常只需要地图、标记点、地形json文件。

leaflet-map
主插件的主函数,用于插入一张leaflet-map。参数就是配置页面的那些,没什么特别的。

leaflet-marker
标记一个地点。参数比较多,挑有用的说。
– lat,lng / address:用于定位标记的位置。lat是纬度,lng是经度。经纬度可以从OpenStreetMap.org上查。国产地图查到的经纬度与OSM查到的有一些偏差,注意要保持一致。而address的数据库偏差非常大,不建议。
– iconUrl:标记用图标。可以是网址,也可以是相对路径,甚至base64代码。如果不设,使用默认的蓝色pin图标。
– title:鼠标移动到标记点上时显示的提示信息。这个与点击标记后显示的内容是两码事。
– iconanchor:图标的锚点偏移。这个参数有点意思,它表示的是你图标的“尖”所在的位置。以默认图标为例,规格是19*25,“尖”在最下方,所以iconanchor就应该是宽的一半和全部的高,也就是10,25。这个参默认项是0,0。每个标记都要自己手动加,相当烦。不过也能够理解,一旦有人用的是左箭头呢?
– opacity:图标的透明度。
– 【leaflet-marker】【/leaflet-marker】之间,放置弹出的html内容。放啥都行,也可以定义css。
另外还有一些参数,我都没用上官网说明文档里都有。

leaflet-geojson
地理信息的json文件。中国的地理信息文件可以在阿里云下载,或者直接引用。建议下载后到mapshaper进行优化后上传,在本地使用。这里非常感谢明明桑,一个优化工具解决了困扰我许久的问题。
– src:地理信息源文件的路径,可以是相对路径或网址。
– color:leaflet提供的属性,边框颜色。
– weight;leaflet提供的属性,边框宽度。
– opacity:leaflet提供的属性,边框透明度。默认的3px蓝色实在是有点虎。缺点是每个marker都需要单独设置。
– fill:leaflet提供的属性,布尔型,是否填充。默认true
– fillColor:leaflet提供的属性,填充颜色,不设则默认使用color
– fillOpacity:leaflet提供的属性,填充颜色的透明度,默认0.2
想一个省一个省点亮的,就下载省级json,想像我这样一个市一个市点亮的,就下载市级json,一次勾一个边即可。话说,我一直认为用省划分习俗非常不科学,甚至用市来划分都不科学。毕竟有粤南粤北、胶东鲁西南,还有江苏十三太保这样的众所周知的文化差异。我甚至觉得应该精确到县。毕竟我们旁边就有一个散装的地级市,我认识一堆人,他们分别来自鲅鱼圈、熊岳、盖州、老边、大石桥,就没有一个称自己是营口人的。但是真正实装以后才发现,县级太困难了,我甚至都没在普兰店歇过脚,自己家都没搞定。

markerclustergroup:聚合分组方法,这是“扩展的扩展”的功能,也是安装它的主要目地。cluster是指将临近的点进行聚合,group是通过关键字对追加的点进行分组。只聚合可以用cluster,只分组可以用leaflet-optiongroup。
– feat:适配项目。可以是【leaflet-marker】中的title或者iconUrl中的一个。参数以部分匹配的方式,对title或者iconUrl形成过滤,然后在右上角形成组别。
– strings:分组过滤用的字符串,用半角逗号间隔。
– groups:分组后显示的字符串。
– position :分组显示位置
– collapsed :分组是否折叠

多说无益,直接举例

【leaflet-map fitbounds】//用fitbounds,就不用关心点的位置和缩放了
【fullscreen】//增加一个全屏按钮
【leaflet-marker lat=38.87430121 lng=121.55204380 iconUrl="/path_to/marker-blue.png" iconanchor="15,40" 】<b>辽师附中</b><i>2012 /04 /<a href="/2012/04/ancient-school-motto.html" target="_blank" rel="noopener">沙河口黑石礁尖山街</a> /街拍 </i><img src="/path_to/imag0114.jpg" alt="imag0114" />【/leaflet-marker】
【leaflet-marker lat=38.88611421 lng=121.63731716 iconUrl="/path_to/marker-blue.png" iconanchor="15,40"  opacity=0.5】<b>西岗中学</b><i>2003 /05 /<a href="/2023/06/post-truth-and-something-before-my-graduation.html" target="_blank" rel="noopener">西岗八一三环街</a> /其他 </i><img src="/path_to/vlcsnap-2023-05-21-17h15m27s675.jpg" alt="vlcsnap-2023-05-21-17h15m27s675" />【/leaflet-marker】
【leaflet-marker lat=38.88890 lng=121.70665 iconUrl="/path_to/marker-yellow.png" iconanchor="15,40"  】<b>棒棰岛</b><i>1993 /08 /中山老虎滩迎宾路 /海滩 </i>【/leaflet-marker】
【leaflet-marker lat=38.93471 lng=121.19765 iconUrl="/path_to/marker-yellow.png" iconanchor="15,40" 】<b>北海王家村</b><i>2018 /08 /旅顺北海王家村 /海滩 </i>【/leaflet-marker】
【leaflet-marker lat=38.98562089 lng=121.65895298 iconUrl="/path_to/marker-yellow.png" iconanchor="15,40"  】<b>蟹子湾</b><i>2015 /04 /<a href="/2015/04/chemical-factories-stories.html" target="_blank" rel="noopener">甘井子甘井子海茂路</a> /海滩 </i><img src="/path_to/BF59AEE251904BC4.jpg" alt="BF59AEE251904BC4" />【/leaflet-marker】
【markerclustergroup feat="iconUrl" strings="blue, yellow" groups="学校, 海滩" collapsed=true】
【leaflet-geojson src="/path_to/dalian.json" color="#FF8888" weight=2 fillOpacity=0.3】//加入大连地图
【zoomhomemap】//调整缩放比
[fullscreen ] [markerclustergroup feat=iconUrl strings=blue, yellow groups=学校, 浴场 collapsed=true ] [zoomhomemap ]

就到这。总之有现成儿的我才不会亲自动手呢。

WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed

作者 老张
2025年9月8日 20:50

 

WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed - 第1张图片

前段时间虽然说是“断网”了,还是偷偷折腾了GoToSocial和Mastodon。GoToSocial和Mastodon都属于通过“ActivityPub”协议实现与多个平台的联邦特性与其他平台互联互通。GoToSocial虽然轻量,但是颜值和功能还是没有Mastodon好,最终选择了Mastodon。至于怎么玩Mastodon,要么像我这样自建,要么就用网上的平台,比如官方的mastodon.social和草莓县m.cmx.im。有兴趣的可以一起玩玩!目前我自建的为@laozhang@suo.si,官方平台和草莓县上分别是@laozhang@mastodon.social和@laozhang@m.cmx.im。为什么自建了还在其他平台注册呢,我怕以后我驾驭不了自建的mastodon,毕竟玩的时间久了数据都都会达到十几个G。或是感觉到单独花二百块钱搞服务器来玩mastodon不值的时候,我可能就把自建的关停掉。

东西玩多了,都想把他们“集成”到一起,比如老张博客首页的“最新动态”就是调取用 Typecho 搭建的https://zhangbo.net老张随笔第一篇内容。有兴趣的可以按《WordPress首页调用typecho方法!》的方法来;又比如在Wordpress的页面里显示Memos内容,方法可以按《巧搬空白Koobai大佬Memos页面,完美与博客整合。》来。

不难看出,在Wordpress里调用memos或是Typecho,都是完全靠代码,毕竟像这样玩的人少更甚是memos等太过小众,没有人折腾这东西,想要实现一些功能必须要靠自己才行。而同时玩Wordpress和Mastodon却大有人在,所以你想实现的功能别人都早就折腾过了。就比如在WordPress中集成Mastodon嘟文。先看效果https://laozhang.org/mastodon.html,这是我在博客里集成了@laozhang@suo.si所发的所有嘟文。那实现这个功能就只是简单的一个插件,Include Mastodon Feed。

1.安装Include Mastodon Feed

直接在后台插件菜单里搜索安装即可,并启用。

2.查找Mastodon 用户ID

不管是自建的Mastodon还是其他平台,把下面的代码内换成自己的用户名和相应的域名后在浏览器内打开,即可显示你的ID

https://yourinstance.com/api/v2/search?q=yourusername@yourinstance.com&resolve=true&limit=5

3.创建mastodon页面

在Wordpress后台新建页面,把下面代码换成自己的ID和相应域名即可。(换成英文中括号)

【include-mastodon-feed instance="YOUR-INSTANCE" account="YOUR-ACCOUNT-ID"】

4.根据自己喜好,自定义CSS

这个可以根据自己的喜好,自己折腾。

 

怎么样,插件版是不是太简单了!无脑操作即可!

 

Typecho主题SimpleBlog开源

2025年8月13日 22:15

一次跨越平台的主题移植手记

2025年八月初,我将一款心仪的WordPress主题移植至Typecho平台,并应用于我的技术博客“林海爱折腾”。

在此之前,这款WordPress主题已在我的博客上使用了近一年半的时间(自2024年1月19日至2025年8月11日)。为了获得更好的中文显示效果并修复一些已知问题,我曾对其进行过一番本地化修改,更加适配汉字的显示与阅读美感。

将这款主题移植到Typecho平台的想法,源于两个简单的初衷:

第一,是对这款主题简约风格的喜欢;

第二,我这可是个技术博客,不亲手移植一个主题,怎么对得起“技术”二字呢?(斜眼笑)

整个移植过程由手动编码与AI辅助相结合。主题框架的搭建本身颇为迅速,大约只用了两小时;然而,后续修复bug,却前后持续了一坤天(2.5天)。

这次的移植过程,让我对两个平台的技术框架有了更深的认识。WordPress将诸多功能(如评论系统、jQuery库等)高度封装,开发者仅需一行或寥寥数行代码便可调用;区块主题更是进一步简化,整个主题的源代码只有数百行,却可以实现高度的可定制化。相比之下,Typecho则相对原始,许多功能的实现都需要开发者从零开始构建样式与逻辑,代码的编写显得细致和繁复。对于编程基础几乎为零的我,这个过程稍有不慎便会“落霞与bug齐飞”,过程相当痛苦。

这里我特别说明一件事——评论区的适配耗费了最多的精力,前后投入了约一天半的时间。若完全沿用原主题当中WordPress封装的评论样式,会导致点击“回复”时评论框无法跟随;若尝试用JavaScript修正此问题,又会引发二级及更深层级评论的显示异常。这是一个AI都束手无策的Bug。我最终选择妥协,选择了一个功能稳定且视觉上同样协调的方案。

主题移植完成并稳定运行数日后,一个有趣的插曲,促使我更换了本博客的主题——由于两个博客的主题外观极为相似,仅在header区域有配色差异,我经常会在不经意间混淆它们,输入错误的后台地址,然后看到那抽象的404页面。为了避免再出现这样的事情,更换主博客的主题,成了一个直接有效的选择。

移植后的主题在几天的实际使用中,未再发现明显的问题。当然,我深知代码中或许还残留着一些移植过程中尚未完全清理的冗余代码,只是这些代码完全不影响博客的正常运行与速度。我希望它能对他人有所助益,我决定将其开源。

以下,是对这款移植主题的详细介绍。其中,“SimpleBlog主题介绍”这部分内容,是在AI助手Craft在阅读源代码分析的基础上,由我人工修订而成。


SimpleBlog主题介绍

主题介绍

SimpleBlog是一款为Typecho博客系统设计的简约风格主题,它移植自设计师Anders Norén的经典作品。这款主题追求“简约而不简陋”的设计哲学,旨在为内容创作者提供一个干净、清晰且能全身心专注于文字的展示平台。

设计特点

1. 极简设计风格

SimpleBlog采用极简主义美学,审慎地去除了多余的视觉元素,引导读者的目光聚焦于内容本身。以黑白为主的配色方案,辅以恰到好处的留白与精心编排的版式,共同营造出一种专业且宁静的阅读氛围。

2. 响应式布局

主题全面支持响应式设计,确保在桌面电脑、平板或是智能手机上,都能呈现出一致而优雅的浏览体验。在移动设备上,导航菜单将自动收敛为汉堡菜单,以维持界面的整洁与空间的通透感。

3. 自定义侧边栏

桌面端采用了固定侧边栏设计,其背景颜色支持用户自定义,默认为沉静的深色(#121212)。侧边栏整合了网站标题、描述及导航菜单,功能清晰,简明实用。

4. 社交媒体集成

主题内置了社交媒体链接功能,支持Twitter、Facebook和GitHub等常用平台,为博主与读者之间建立更广泛的连接提供了便利。

5. 优雅的文章展示

文章页面的设计简洁而大方,标题醒目,正文排版清晰易读。页面支持特色图片的展示,能够有效提升文章的视觉吸引力。同时,文章的分类、发布时间等元信息也以直观的方式呈现。

技术特点

1. 轻量化设计

主题整体代码结构清晰,无冗余功能和复杂的外部依赖,确保了页面的快速加载,对服务器资源消耗极低。

2. 标准化HTML5/CSS3

主题基于最新的HTML5与CSS3标准进行构建,保证了良好的浏览器兼容性与未来的可扩展性。

3. 自定义字段支持

为方便博主更灵活地控制文章的展示形态,主题支持多种自定义字段,例如文章缩略图(thumbnail)与文章摘要(excerpt)等。

下载地址

详见下载地址(下载地址1下载地址2)内的主题文档。

适用场景

SimpleBlog主题尤其适合以下类型的博客:

  1. 个人日志:记录生活点滴、心情随笔的个人空间。
  2. 技术博客:分享编程知识、技术教程的专业园地。
  3. 文字创作:专注于小说、散文等以文字为核心的创作平台。
  4. 极简主义者:追求简约设计与内容至上理念的博客作者。

总结

SimpleBlog主题秉承“简约而不简陋”的设计理念,为Typecho用户提供了一个专注于内容、设计精美且易于使用的博客主题。它没有华丽的动画与繁复的设置,但在每一处简约的背后,都体现了对用户体验和内容呈现的深思熟虑。

如果您是一位注重内容质量,希望读者能够专注于您的文字,而非被纷繁的设计元素分散注意力的创作者,SimpleBlog或许会是一个理想的选择。


主题改造详情

为了让这款源于WordPress的主题能在Typecho上呈现出理想的状态,我进行了一系列细致的调整。

删减的功能

1.统一日期格式:移除了原主题中 j M / M j 等多种英文日期格式切换选项,统一为更符合中文阅读习惯的 n月j日 格式。

2.移除“相关文章”模块:原主题的相关文章功能对缩略图有硬性要求,若文章缺少缩略图,会影响布局的美观。相比之下,一些付费主题(如Typology)在此处的处理更为灵活优雅。

原主题的相关文章样式

3.取消首页标题显示:据观察,启用此功能的用户不多。我曾在自己的博客上短暂保留此设计,以审视其视觉效果,但最终还是决定取消,直至更换新主题。(请见图片中用横线标注的位置)

横线标注的是首页标题显示效果

4.简化移动端搜索交互:原主题在移动端使用了Ajax即时搜索,但其体验并不完善——仅能搜索标题,无法覆盖内容。考虑到Typecho需自行适配Ajax,我将其简化为更传统、更高效的“输入+回车”搜索模式。

优化的功能

  1. 社交链接后台化:由于Typecho缺乏原生的菜单系统,我将社交链接的设置移至后台。预设了GitHub、Twitter和Facebook三个输入框,通过Font Awesome字体库渲染图标。若留空,则侧边栏仅显示搜索按钮。
  2. 中文字体适配:对主题的字体族和字号进行了微调,使其在中文环境下显示更为和谐、易读。
  3. 提升视觉统一性:新增了一项功能,即用户在后台设定的主题色,现在会自动同步应用于评论按钮、超链接以及文本选中时的背景色,从而增强了整体视觉的一致性。
  4. 调整分割线样式:将首页及归档页文章标题间的分割线由实线改为虚线,个人认为这样更加美观,从而将焦点聚焦在内容上。
  5. 文章置顶:配合我修改的文章置顶插件,可利用主题内置样式显示置顶文章。

移植主题合法吗?

Of course!

原主题基于GPL 2.0许可证发布,该许可证赋予了用户自由使用、修改和分发软件的权利。

同时,我也需要履行GPL的相应义务:我修改后的版本同样须在GPL 2.0许可证下发布,并且必须保留原作者的版权声明。

为了审慎起见,我特意致信原作者,并在两天后收到了他的积极回复:

Sure, go right ahead! All of my themes are released under the GPL license, which means you can port them as long as you also release the port under that license.

——Anders Norén

如果您决定使用这款主题,也请务必遵守GPL 2.0许可证的相关条款

如您喜欢这款主题,我会倍感欣慰。

一款简洁、美观的 WordPress 友情链接插件

2025年8月5日 10:38

近日,我开发了一款全新 WordPress 友情链接插件。该插件简洁、美观、易于使用。

可以访问以下链接查看实际展示效果:友情链接展示页

插件特性

  • 响应式布局:在桌面端默认每行展示 3 个链接,并能根据屏幕尺寸自动调整,在平板和手机上也能完美呈现。
  • 信息展示丰富:每个链接均会展示对方网站的 Favicon(头像)和博客名称,一目了然。
  • 灵活的排序方式:支持固定排序和随机排序两种模式。设置为随机排序后,每次刷新页面都会带来全新的链接顺序。
  • 智能头像获取:自动通过 favicon.im 服务抓取网站头像。同时支持手动指定头像链接,或在留空时显示默认头像。
  • 简洁的管理后台:后台管理界面操作直观,美观大方。
  • 纯净无残留:启用时自动创建专属数据表,禁用时彻底删除,不在数据库留下任何冗余数据。
  • 数据轻松迁移:内置导入/导出功能,方便备份和恢复友链数据。

使用方法

1. 下载与安装

可从以下链接下载该插件:点此下载

下载 .zip 压缩包后,在 WordPress 后台的“插件”—>“安装插件”页面上传并启用。

2. 插入短代码 (Shortcode)

在任意页面或文章中插入短代码即可展示友情链接。

如何在编辑器中插入?

  • Gutenberg (区块编辑器):添加“自定义 HTML”区块,将短代码粘贴进去即可。
  • Classic Editor (经典编辑器):直接在文本编辑模式下粘贴短代码。

未来计划

计划将此插件移植到 Typecho 平台。

致谢

在插件的开发过程中,AI 提供了巨大帮助,特此感谢科技的力量。

经过两天的密集调试,目前插件运行稳定,暂未发现明显 Bug。欢迎提出宝贵的意见和建议,或是一同参与改进,让它在保持简洁、美观、易于使用的同时可以变得更好。

制作了款 wordpress 主题 Cooooo

作者 夜枫's
2025年5月24日 23:42

上一个博客主题《Memorable-lit》,缝缝补补也将就用了六七年,况且,博客也是将近一年多没有更新,好多篇博文静静地躺在了草稿箱里……

这次呢,想着借机写一款主题,形式依然是我喜欢单栏。由于很久不写代码,看到代码很生疏了,外加当前前端技术迭代太快了,好多HTML、css3的新特性和js的ES5、ES6,我处于完全看不懂的状态,这个主题的由来是我平时浏览网站的时候,看到别人好看的风格样式,就扒拉扒拉下来了,有的懒得动脑子,就直接参考和借鉴过来。整个主题是使用字节推出的 Trae CN 编辑器,本地电脑搭建环境,外加用上Trae 的 Ai 来写代码,效率是离谱的高,在这个主题绝大部分代码是使用 Ai 的写的。开发效率是有点高,尤其是在解决一些很复杂的逻辑时,你只需告诉 Ai 程序的基本逻辑,它便生成可用的代码,在前端库的选择, 当然我选择的是 jQuery,其实前端JS可以用原生来实现,但是用着jQuery很顺手,代码简单,一行代码就能搞定的,没必要绕弯。别人都在用高级的Hexo、Hugo 等高级,而我依然选择的是 wordpress,可能懒得折腾、懒得写作时用Markdown,也可能是保持了习惯和旧状态,新特性对我没有吸引力吧。

年初一段时间博客感觉被黑了,博客的插件里出现了一些奇奇怪怪的代码,感觉是木马后门之类的代码,之前博客的版本为4.8,也是年久失修的状态,可能存在能利用的漏洞,导致的博客沦陷,当前,wordpress 最新的版本为 6.8.1,借机新主题就在最新的版本上测试开发,前前后后感觉写了近两个月,部分代码也是参考了大佬们的代码,修修补补,也算是正常跑了起来。

当前博客跑在Nginx + Mysql + php 8.1 下,对于 2 核2G 的云主机来说够用,甚至剩余的算力可以跑跑 docker 里的小应用,整体相对比较顺畅。

这次换主题也顺便修修花、剪剪草和施施肥,对于改造博客我也是下了很大的决心,好在一点点雏形出现到基本能用的状态,也是可喜可贺。当然主题若有问题,欢迎评论区提出,当然这个主题足够完善并且很有必要的话,可能也会开源哦。

博客我加个视频播放器、音乐播放器和全景播放器,想着给博友们分享一些我外出拍摄的一些照片和内容吧。

WordPress的文章别名是中文英文拼音,怎么改为文章ID

作者 老灵
2025年5月23日 11:34

WordPress的文章别名是中文英文拼音,怎么改为文章ID

很多人在搭建WordPress的时候,文章固定结构包含了%postname%,而不是%post_id%,后面想改又怕麻烦。其实做好规范,改动也没什么影响的。

在 WordPress 中,如果你想将文章的别名(slug/permalink)从中文改为数字 ID,可以通过以下几种方式实现。

下面是具体操作方法:

✅ 方法一:修改固定链接结构(推荐)

登录 WordPress 后台。

  1. 进入菜单:设置 > 固定链接(Settings > Permalinks)。
  2. 选择自定义结构(Custom Structure)。
  3. 输入以下内容:/archives/%post_id%/
  4. 或简单地使用:/%post_id%/
  5. 保存更改。

这样你的网站文章链接就会变成:https://example.com/123/

♻️方法二:批量修改已有文章的别名(slug)

上述方法修改的是新生成的链接结构,但如果你之前的文章已经使用了中文别名,在固定链接中可能依然显示中文。可以通过插件或代码批量将旧文章的 slug 改为数字 ID。

?方法一:使用 SQL 批量替换(建议备份)

你可以进入数据库(通过 phpMyAdmin 或类似工具),执行如下 SQL 语句:

UPDATE wp_posts SET post_name = ID WHERE post_type = ‘post’ AND post_status = ‘publish’;

注意:wp_posts 表名中的 wp_ 前缀需根据你实际的表前缀调整。

?方法二:手动更改为 ID(适合文章较少)

查看该文章的 ID(可以在浏览器地址栏中看到,比如 post=123)。

在「别名」字段中,将现有内容手动改为这个数字,如:123,点击 更新 即可。

?方法三:通过函数自动设置 slug 为 ID(适合文章较多)

你可以将以下代码添加到你主题的 functions.php 文件中(或使用 Code Snippets 插件添加),自动在文章发布时将别名设置为文章 ID:

https://github.com/lingchenzi/blog/blob/main/wordpress/change_post_slug_to_id


//修改文章别名为文章id
function change_post_slug_to_id($post_id) {
$post = get_post($post_id);
if ($post->post_type == 'post' && $post->post_status == 'publish') {
$new_slug = $post_id;
remove_action('save_post', 'change_post_slug_to_id'); // 避免死循环
wp_update_post(array(
'ID' => $post_id,
'post_name' => $new_slug,
));
add_action('save_post', 'change_post_slug_to_id');
}
}
add_action('save_post', 'change_post_slug_to_id');

? 注意事项

  • 如果你的网站已经上线,改动固定链接可能会影响 SEO 和已有链接。建议设置 301 重定向

  • 可以使用插件如 Redirection 来管理旧链接的跳转。

WordPress网站地图在Google Search Console中没有显示具体数据

作者 老灵
2025年4月15日 10:41

最近我将一个WordPress网站的网站地图提交给了Google Search Console,但是过了一周后,发现 Google Search Console 中没有显示具体数据。搜了下Microsoft Copilot,可能有几个原因导致这个问题。

WordPress网站地图在Google Search Console中没有显示具体数据

Google Search Console 中没有显示网站地图的具体数据,以下是一些可能的解决方案:

  1. 检查网站地图的提交状态
    • 确保你已经正确提交了 文件,并且 Google Search Console 没有返回错误信息。
    • 你可以在 “站点地图” 部分查看提交状态。
  2. 确认网站地图的格式是否正确
    • 网站地图应该符合 XML 规范,并且可以通过浏览器访问,例如 https://yourdomain.com/sitemap.xml
    • 你可以使用 Google 的站点地图测试工具 来检查是否有格式错误。
  3. 检查 文件
    • 确保你的 robots.txt 文件没有阻止 Google 抓取网站地图。
    • 你可以在 https://yourdomain.com/robots.txt 访问并检查是否有类似 Disallow: /sitemap.xml 的规则。
  4. 查看 Googlebot 是否能访问你的网站
    • 你可以使用 网址检查工具 来测试 Google 是否能够抓取你的网站地图。
    • 如果返回 404 错误无法访问,可能是服务器配置问题。
  5. 等待 Google 处理
    • Google 可能需要一些时间来处理你的网站地图,尤其是如果你的站点是新站点或内容更新频繁。
    • 你可以尝试 重新提交 网站地图,并等待几天查看是否有数据更新。

梯子机场推荐:最低年付99元,100G流量/月

如何在本地调试WordPress时忽略对wordpress.org的网络连接请求

作者 大致
2025年3月13日 10:43

本地调试WordPress时,为了保证代码的正确性,插件和主题作者往往会打开wp-config.php里的WP_DEBUG开关。如果您不知道这个开关,就不要往下看了。

define('WP_DEBUG', true);

这样PHP运行时的错误和警告就会以醒目的字体直接打印到网页上。
20250313_WP_local_debug_warning

但是这样会带来一个程序员的日经问题:是我的BUG我改,不是我的BUG莫挨老子!
按说WP这种成熟的产品是不会让用户看到警告和错误的。但是,由于众所周知的原因,WP内核、主题和插件升级所需要的WordPress的官网wordpress.org时灵时不灵,连不上的时候就会显示大面积的警告信息。
安装完成以后,后台这种需要连接到wordpress.org的地方大抵有4种:core update、theme update、 plugin update和translation api,出现在后台Dashboard、 Plugin、 Theme、 和Settings页面。其中Dashboard会调用前三种Update,Settings四种都会调用。
这些信息不仅是影响对于出错代码的判断(比如图中提示的“Cannot modify header information”,其实根本就不是本地header的问题),还会直接影响页面元素的渲染和操作。
那就必须要干掉它!

再次更新,

define('WP_HTTP_BLOCK_EXTERNAL', true);

这个宏屁用没用,还是得用我下面的方法。

开整。

//下面的action钩子调用的早,所以在加载主题或插件的时候就要直接remove掉,否则没机会了。
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    remove_action('admin_init', '_maybe_update_core');
    remove_action('admin_init', '_maybe_update_plugins');
    remove_action('admin_init', '_maybe_update_themes');
    remove_action('init', 'wp_schedule_update_checks');

    //translations_api默认会返回false,之后会访问wordpress.org,返回空数组之后就不访问了。
    //Since 4.0.0
    add_filter('translations_api', '__return_empty_array');
}

//调试者作为admin,默认是有各种update权限的。这里令各种内部调用user_has_cap询问4种权限的结果强行置为false。
function _debug_ignore_wp_request ($allcaps, $caps, $args){
    $server_caps = array('install_languages', 'update_themes', 'update_plugins', 'update_core', 'install_themes', 'install_plugins');
    foreach ($caps as $cap) {
        if ( in_array($cap, $server_caps)) {
            $allcaps[$cap] = false;
        }
    }
    return $allcaps;
}

function my_admin_init {
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
        //下面的钩子很多不能移除得太早。
        //宁杀错不放过。
        remove_action('upgrader_process_complete', 'wp_update_plugins');
        remove_action('upgrader_process_complete', 'wp_update_themes');
        remove_action('load-plugins.php', 'wp_plugin_update_rows', 20);
        remove_action('load-themes.php', 'wp_theme_update_rows', 20);
        remove_action('load-plugins.php', 'wp_update_plugins');
        remove_action('load-themes.php', 'wp_update_themes');
        wp_unschedule_hook('wp_version_check');
        wp_unschedule_hook('wp_update_plugins');
        wp_unschedule_hook('wp_update_themes');

        remove_action('wp_version_check', 'wp_version_check');
        remove_action('load-plugins.php', 'wp_update_plugins');
        remove_action('load-update.php', 'wp_update_plugins');
        remove_action('load-update-core.php', 'wp_update_plugins');
        remove_action('wp_update_plugins', 'wp_update_plugins');
        remove_action('load-themes.php', 'wp_update_themes');
        remove_action('load-update.php', 'wp_update_themes');
        remove_action('load-update-core.php', 'wp_update_themes');
        remove_action('wp_update_themes', 'wp_update_themes');
        remove_action('update_option_WPLANG', 'wp_clean_update_cache', 10, 0);
        remove_action('wp_maybe_auto_update', 'wp_maybe_auto_update');
        add_filter('user_has_cap', '_debug_ignore_wp_request', 10, 3);
    }
}

add_action('admin_init','my_admin_init');

完事。这个世界清净了。


  • (1):农历每年冬至所在的月固定为十一月。如果两个冬至间有13次朔望,则该年产生闰月。13个月中,第一个没有二十四节气里的偶数节气的月份就是闰月。因为十一月是起调点,所以农历十二月和正月是不会出现闰月的,正月初一和第一个节气春分受的影响也很小。我数学不好,但查表得到的结果,从1950年到2069的120年间,闰年就是双春,双春就是闰年,一一对应,无一例外。闰月是典型的用太阳历调整月历的规则,所以农历是阴阳历而不是纯阴(月)历。

WordPress文章/页面外链自动添加nofollow【代码/插件】

作者 老灵
2025年3月3日 20:48

在 WordPress 的文章和页面中为外链自动添加 nofollow 属性是一个常见的 SEO 优化方法,可以防止将链接权重传递给外部网站。我们可以手动在主题的 functions.php 文件中添加相关代码来实现自动添加 nofollow,也可以使用插件。

一、主题文件添加代码


//文章与页面外链自动添加nofollow
function add_nofollow_to_external_links($content) {
$regexp = '/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>/i';
preg_match_all($regexp, $content, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
if (!strstr($match[2], home_url())) {
$content = str_replace($match[0], str_replace('<a ', '
}
}
return $content;
}
add_filter('the_content', 'add_nofollow_to_external_links');

Github代码:https://github.com/lingchenzi/blog/blob/main/wordpress/wordpress-nofollow

二、使用插件

1、Nofollow for External Link是一个更简单、专注于添加 nofollow 的插件;

2、WP External Links 是一个功能强大且广受欢迎的插件,不仅能为外链添加 nofollow,还提供额外的功能,例如让外链在新标签页中打开。

梯子机场推荐:最低年付99元,100G流量/月

博客升级为 WordPress 6.7

作者 吴杰
2024年11月13日 16:14

WordPress 大版本 6.7 今天发布了,随之而来的是 2025 主题,我已经升级了,并且换上了最新的主题,正如你所看到的一样。

原来我是一直嫌弃块主题的,今天摸索了下,不知道是6.7的块主题变好了还是我会用了,总之就是真香。

全站编辑真的很方便。最明显的体会就是页脚悬挂备案编号。之前我是通过建立子主题,然后在子主题里修改footer.php文件来实现的,为了挂一个备案编号而专门建立一个子主题,有点高射炮打蚊子的感觉。现在好了,直接编辑网站,修改页脚文字就可以实现了,真的很方便!

前段时间以来,一直在反思自己,随着年龄的增长,会有一点守旧,其实应该更开放一点,多拥抱新事物,才不至于被时代落下。

虽然古腾堡和全站编辑在互联网上风评不好,很多人觉得不好用,但我觉得还好,拖拖点点就能实现一些想法。方便用户使用,总是好的,最起码方向应该是没有错。至于为什么有那么多人喷,我想大概是幸存者偏差,用的好的人不会专门发个帖子赞扬它,只有觉得不好用的人才会去发帖抱怨,所以造成了看到的都是抱怨贴。

现在 WordPress 全力 all in 古腾堡,我相信未来会变得越来越好用,越来越成熟。

又到续费时

作者 大灰
2024年11月11日 13:00
话说我使用搬瓦工是从2017年开始,中间也买过其他家的机器,灰常记忆一直从未挪窝稳稳的运行,虽然慢却可以打开…… 今天看了下这台vps,硬盘空间又不足10GB了,感觉也没搞什么东西在上面😂,现在看来vps最低配置2H3G-50GB+空间才适合我。 今天把Nginx换到了Nginx openresty,其实也没感觉出来有多快,有些东西不兼容又换回nginx。有好的东西就想尝试下,又不是太折腾。 又到了一年VPS续费的时节,目前手里一台香港、一台美国瓦工、两台美国大硬盘机器。 买了两台大盘鸡,用来做备份。现在使用wp后台总是会报错,挺无解的尽管玩了这么多年wordpress还是找不出问题所在,只能 […]

近期调整计划

作者 大灰
2024年5月16日 00:30
最近这几天心情挺烦躁,有时候压抑,有时候暴躁的很。真不知怎么了做事也特别没有耐心,也许是太多事压在心头闹的! 试了新的wordpress自带主题,感觉还蛮不错的,配置起来还不是很麻烦。 最近网站的一些调整: 1. 打算把文章别名改为数字ID,因为有时候文章名会重复,也懒得在一次次修改这个拼音别名了。(毕竟新版wordpress已经很好了,别名终将成为过去,必须接受新的事物。)-待定 2. 彻底修改图床程序,现已改为wordpress,图片链接地址不变。-已实现 3. 准备取消自建的统计?统计了又有什么用?CF自带的也挺爽,折腾这些多余的没啥作用。-待定 4. 有计划取消自建的RSS,2-3究其 […]

关于博客新主题

2024年1月19日 16:55

在这篇文章中,不讨论深刻的问题,仅仅讲述博客新换主题的一些事情——为何选择这个主题,我对主题进行了哪些修改,我从中得到了什么。

博客的上一个主题

上一个主题修改自Saira。查看开发日志,我发现后期版本中删掉了很多用于主题自定义的代码。查看官方主题商店可见,这部分自定义功能,外加一些其他功能,被设置成了付费主题功能。我利用wordpress.org的开发日志功能,将作者删掉的那部分代码手动恢复了回来。

这个主题的代码中,有大量的注释,而且注释中非常清晰的写出:如果你想改,请改动这里的哪个代码。作为非程序员,对我来说,这大大降低了修改的难度。

这个主题我用了两年半,期间断断续续进行了多次修改。

我突然想到,某国产博客系统的应用商店,没有类似于开发日志的功能,我们无法查看商店内所有开源主题和插件的历史源代码。

博客的新主题

上一个主题用了两年半,我的心境发生了一点变化:主题本来很简单了(不能说是极简,毕竟页面元素还是有好几种),但我想找找更简单的——我想尝试首页只有标题,没有摘要的主题。折腾的过程中,我测试过多个WordPress主题,最终将目光放在瑞典大佬开发的免费主题McLuhan,并进行了一些修改。

适配汉字

该主题自带字体文件及相应css,该字体不是汉字字体。我修改字体家族,调用Windows、Linux、macOS、BSD的内置字体进行显示。并且移除原字体文件及相应css。

我看到有些博主用了云端字体,如霞鹜文楷和思源宋体。当我正在阅读他们的文章时,突然屏幕一闪,所有文字消失,几秒钟后,这些文字以引用的字体重新显示。这个过程有点突兀,因此我没有在博客上使用云端字体。

主题汉化

对前端显示的英文进行汉化。除右下角的版权信息外,其余部分应该已经全部汉化了。如果我发现汉化不完整的地方,还会进行修改。

修复Bug

该主题有一处bug:评论翻页,或提交评论后,无法直接跳转到评论区域。我不是程序员,所以发现该bug时是懵逼的。对比上一个主题的源代码,我发现该主题少了一句代码,也就是id="comments"。添加以后,这个问题没有再出现。

修改主题的收获

检验知识的唯一方法

在过去折腾的过程中,我虽然没有足够的时间去系统性学习html+css,但我依然学到了一些css和php知识。在修改主题的过程中,可以对我所学到的知识进行检验,看看我掌握的知识有没有出现错误。事实证明,我学到的是正确的。

验证自己的想法

在讲述如何验证自己想法之前,先讲一下心路历程。

该主题针对英文及瑞典语文章的显示效果是非常好的。我们都知道,汉语言文字和英文、瑞典语最大的不同是,汉字是方块字,视觉上要比英文和瑞典语文字大。因此,使用该主题显示汉字便没有英文和瑞典语那么好看了,我需要进行修改。

我想到,如果我增加行距,设置为两端对齐,为了减轻眼睛负担而将字号加大(尤其是移动端),是不是可以呢?

于是改动相应的css代码进行测试。最终发现,我的想法是正确的。

成就感

修改主题的过程中,当自己收获了成功的喜悦,心中会有让自己满足的成就感。

也许有人会问:你为何不直接用国内开发者的主题,你到底是什么居心?

答:没有什么居心,就是因为这种成就感。

在一位国内大佬连续开发出几个简单的WordPress和Typecho主题之后,我看到有博主在其博文中说:“我看到关注的博客很多都已经食用。”这个“很多”到底是多少,我不清楚。我关注的博客中,也有使用的。他的主题外观看起来不错,我在测试站安装使用过。外观好看的主题当然不仅于此。我选择了在自己能力范围内的折腾,这个过程让自己有知识和能力上的收获,更有成就感。

这个主题会用多久

这取决于下一次心境变化的时间,目前还无法确定。

下一个努力的方向

学会WordPress的主题架构,并能够将自己在Typecho上开发的主题移植到WordPress。由于时间有限,这个努力的方向能否实现还不确定。

在这里,要感谢TasteWP提供的免费服务,给我提供了完善的测试环境。特别是,我的VPS和虚拟主机都尚未支持安装PHP 8.3,但这个主题确实是在PHP 8.3环境下修改的。

博客带给我什么?——博客重建7周年

2024年1月2日 19:24

自2016年12月29日博客重建以来,至今已走过7个年头。有句话叫“七年之痒”,博客重建7年后,写博客的热情因极度繁忙的工作而有所减退——本来想在2023年12月29日将这篇文章发出来,无奈闲暇时间太少,断断续续写到现在。然而,即便如此,我依然没有放弃长文写作。宁愿不写,我也不愿意将博客完全变成微博。如果没有这个信念,我也不会在2016年底选择重建博客。既然重建,那就把这个信念坚持到底。

博客带给我精神层面的提升

接受曾经的自己

博客重建伊始,我想督促自己戒掉智能手机成瘾,记录相应的心路历程。最终,博客建立的比较成功,但戒掉智能手机成瘾却失败了。

2018年,我开始记录自己的成长经历,名为《人生前三十年》。这个连载在2020年暂时停更,原因是这种记录方式并没有凸显我和家庭成员的性格成因,以及带给我的无穷伤害。我需要换一种方式去记录这一切,但由于工作的忙碌而无暇顾及。

我为何要去写《人生前三十年》呢?起因在2017年,我陷入有点严重的抑郁状态。当时的我,不知道问题的起源,受制于物质条件,我无法去进行昂贵的专业心理咨询。天无绝人之路,因缘和合之下,经过有相似经历之人的点拨,后购买心理问卷调查,我终于得以了解到,自己抑郁,以及一系列性格和行为缺陷及障碍的根源,完全来自于原生家庭。经过总结和思考,我决定以《人生前三十年》的名字将这一切记录下来。虽然文章没有写出自己想要的样子,但写作的过程极大缓解了我的痛苦,减轻了抑郁的折磨。

2019年6月,我去了当时赫赫有名的建立在安徽宣城的净土宗寺院“弘愿寺”。三天后,我离开寺院,此时我基本走出抑郁,能够正常工作和生活。从此以后,自己的性格有极大改善,虽然目前仍有缺陷——比如自己依然喜好争执——但已经和过去的自己完全不同,几乎已经彻底脱胎换骨。重建后的博客,记录了这整个历程。

这便是博客重建带给我的巨大帮助之一。精神层面的提升,对我非常重要,彻底改变了我的人生走向。如果没有通过在博客上写作,进而发生这些改变,也许我已被埋在黄土之下。

陪伴自己成长

在博客的“关于”页面,我列出了自己使用独立博客的历史。里面提到,2013年9月16日博客因主机垮掉而倒闭之时,有个唯一的数据库备份。博文数据现在完整地放在wordpress.com上,但我从来没有去回顾。直到前两个月,我在进行测试时(下文会提到我在测试什么),将数据又恢复了一次,保存在了测试站上。工作之余稀少的休息时间,我间歇性的将以前的文章通读了一遍。

以前的文章,与现在的对比非常明显。不仅透露出曾经的幼稚,还凸显出来因原生家庭环境影响而出现的性格问题,及进而导致的语言表达问题。另外,观察世界、思考问题及写作方面的思维,已在接受学校教育之后被固化,这大大限制了我从多角度、多方面去观察世界和自身,这种情况在文章里同样表现的非常明显。

所幸的是,我终于在2018年以后认识到了这些问题。在摆脱原生家庭影响方面,我做的还算是成功;摆脱思维固化方面,仍在努力挣扎。我知道,在背后那只“手”的操纵下,想做到摆脱思维固化是非常难的。但既然已经意识到这个问题了,我必须去解决掉它。

在这里,我把其中一个事情单独拎出来说说。以后我也许单独撰文回顾这件事,因此本文中我只用寥寥数语讲述一下,希望您不要把焦点全部放在这件事上。2010年时,我喜欢过一个女生,暧昧了两个月以后,她拒绝了我。大半年以后我才走出来,因为她,我写了五篇文章。现在回头看看,当初的情执,反映的问题恰恰是原生家庭环境塑造了我缺乏关爱、没有安全感、缺乏调节情绪的能力和控制欲强的性格。这个女生在2021年结婚生子,她的老公不是我,而我也从这恶劣的性格中解脱了出来。

这些成长的过程,被我用博客记录了下来。博客的存在,陪伴了我的成长。

只是2016年之前的数据,我永远都不会再公开出来。存储这些文章的wordpress.com站点,被我设置成了私密。

反抗思想的“被迫”退化

在《警惕背后的那只手——读和菜头〈重开博客〉有感》这篇文章中,我提到,背后的那只“手”在操纵着我们能够从纸质材料和互联网中获取的一切信息类型和内容,更是操纵我们只能获取他们编撰或是杜撰的一切知识、思想和情绪。在他们的操纵下,绝大多数人会愈发心浮气躁,进而丧失逻辑思维和思考能力。即便是热爱写作的人,除了会发生前文提到的观察世界、思考问题和写作方面的思维被禁锢的问题之外,还存在这些能力的退化,首先表现出的便是阅读和写作长文能力的丧失。

大秦从未消亡,法家的理论体系对治理我们的人来说从未“过时”。对治理我们的人来说,我们出现这些恶性变化对他们和他们的后人绝对利好;对我们来说,这导致我们失去了最基本的学习能力,进而会丧失重要的生活能力,沦为一个丢失灵魂的行尸走肉。

有一些被操纵的人,意识不到这些不说,反而仗着手里的话语权去替那只“手”辩护,再试图让意志不坚定或没有主观意志的人堕入更深层的思想地狱。

如果换在过去,受原生家庭影响,我是个讨好型人格,没有任何主见,别人说什么我都相信,我能想象到自己早已踏上通往奴役之路的样子。通过不断的思考、观察和写作,如今虽然也在这条路上,但行走缓慢,希望永远不会走到终点。

博客带给我技术上的进步

折腾,还是折腾

我曾多次在博客上说“多思考,少折腾”,但只要有闲暇时间,我便收不住这颗折腾的心。

这些年,注册过数不清的BSP,折腾过独立搭建Typecho、Zblog PHP、MovableType、Flatpress(文本数据库)、Ghost、PivotX(已停止开发)、Farbox 2.0,以及已经记不住名字的程序。前些日子,我利用一个随时可能跑路的个人主机商的月付版高配VPS折腾了消耗运行内存很严重的Halo程序。有的程序折腾的掉头发,有的则能做到熟练使用。

我已熟练掌握如何利用Netlify、Vercel和CloudFlare Pages在线编译Jekyll、Hexo和Hugo,而不是本地生成html再上传。

我在自己的VPS上用过Ubuntu、Debian、Centos和AlmaLinux操作系统,在VPS上用过纯命令行操作的LAMP和2023年发生挂马事件的LNMP,也用过宝塔、1Panel、AMH、WDCP、WebAdmin等服务器控制面板。

现在,我将目标放在使用Litespeed环境、Mariadb数据库的CyberPanel面板。我的两台VPS分别在跑OpenLitespeed和已开通Starter Plan(免费)的Litespeed Enterprise。

我曾发布过3个Typecho主题,分别是DiaryWriteSimple,修改并发布了Typecho的目录树插件

我曾魔改几个WordPress主题,包括现在自己在用、啊呜喵在用的,以及几个在测试站上欣赏的。

我还曾无偿帮助过几位博友建立、维护自己的博客。

在折腾的过程中,虽然远达不到精通的程度,但还是了解了不少东西,促使我能够基本独立进行博客的建立和维护,还能帮助博友解决一些常见的基础问题。在技术层面之外,与人心有关的种种,我也深刻领悟了——我在求助技术问题时,曾被少部分博主嘲讽,特别是折腾Bitcron期间;当思想本可以碰撞出火花时,极个别博主却不想真心讨论问题,只想让你接受,只想教育你,只想证明你是错的,在找不到理由时,便直接进行人身攻击。可又能怎么样?始终没能阻止我技术和思想的成长。

折腾是我的爱好,但我不会将它变成职业。有位WordPress免费主题开发者的前车之鉴便是如此。

博客运营的备用选择

经过折腾,我可以做到不拘泥于某个特定的服务,某个特定的技术去维护博客。假如,提供服务的主机商倒闭了,或服务质量大幅度下降,可以立刻迁移;某个著名的服务器控制面板加入了后门(懂得都懂),可以立刻使用其他的面板;博客程序能做到无缝切换,不损失任何数据……

为了博客能顺利的维护下去,我准备了备选方案。

前面提到,我为了测试而恢复了旧的博客数据。我测试的,正是上文提到的Litespeed Enterprise。我花费0元购买了Litespeed Enterprise的Starter Plan,复刻了与目前所用虚拟主机完全一致的服务质量和使用体验。如果目前的虚拟主机不再使用,我可以在自己的VPS上独立托管这个博客。

对于使用Litespeed Enterprise的虚拟主机,或者专业的WordPress Hosting,也有备选,虽然花销会比目前使用的虚拟主机高,但依然低于使用VPS的费用。

等待天明

影视节目制作人季业曾说过这样一段话:

如果天总也不亮,那就摸黑过生活;如果发出声音是危险的,那就保持沉默;如果自觉无力发光,那就别去照亮别人。但是——但是:不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意洋洋;不要嘲讽那些比自己更勇敢、更有热量的人们。可以卑微如尘土,不可扭曲如蛆虫。

摸黑生存并不可怕,可怕的是为黑暗辩护;同样可怕的是,身处黑暗却不自知,以至于双目失明。

我想起这样两类人:

第一类人,代表之一便是斯维拉娜·亚历塞维奇在《二手时代》中记录的,那些在罪恶的时代结束之后反而仓皇失措的人。

第二类人,代表之一则是东晋、姚秦时期著名高僧鸠摩罗什。从公元382年开始,他经历了人生至暗的20余年,但他依然没有放弃信仰和信念,厚积薄发,最终成为一代高僧,译经三十五部,广为流传到今天。

我正在向鸠摩罗什及以他为代表的第二类人学习。在至暗时刻,我一直试图点燃烛光,哪怕再微弱,也要照亮内心。如果能唤醒他人,那便是功德无量。我相信,天亮之前是最黑暗的时刻,熬过这一刻便是黎明的曙光。我会耐心守护心中的烛火,拼尽全力等待天明。

警惕背后的那只手——读和菜头《重开博客》有感

2023年11月19日 10:49

说来惭愧。前不久我才知道和菜头已重开博客,而这已经是6个月之前的事情了。作为十几年前便开设了独立博客的博主,当时的博客圈很少有人不知道和菜头。


先说说我对和菜头仅有的了解。

2011年,我从一本讲述Linux日常使用的书的配套光盘的视频中看到了一个网站《槽边往事——比特海日志》,这就是和菜头最广为人知的博客。

就在那段时间,我发现他其实还有两个开设更久远的博客,内容是同步的,在2009年底全部被“隔离”了。有其他独立博客记录了原因:当时他点评了一个社会新闻。具体是什么新闻,时隔十余年我已经不记得了。那时,他的文章后面会附上一句话和一张图,巧的是这张图我因为很喜欢便保存起来了,如今贴在这里,一起回味。

和菜头在没有被“隔离”的博客上发布的内容与另外两个博客同步。根据页面版式、302跳转链接、页脚的电话号码等信息,我推测这个博客托管在了罗永浩创建的牛博网上。这个网站对近些年走入博客圈的博主来说应该都很陌生。想当年,牛博网上群英荟萃,也正因如此,牛博网被强制关闭,服务器被迫迁移,随后也被“隔离”;老罗在国内服务器重新开设了“嫣牛博”,将其定义为“阉部落”。2013年夏天,老罗关闭了牛博和阉牛博,但《槽边往事——比特海日志》一直保留着。几年后,打开《槽边往事——比特海日志》,页面提示数据库空间已满,博客倒下。

和菜头曾经利用Feedburner(后被谷歌收购)提供邮件订阅,该服务通过抓取RSS更新,自动向订阅的电子邮箱发送新的内容,无需手动操作发送过程。我的邮箱收到的这些邮件,至今依然保留着。

几年前,和菜头转战WX公众号。然而,他的写作风格却在写公众号不久之后就变了。

和菜头在2011年7月23日的文章(互联网档案馆同步链接)当中提到:“我的实名并非和菜头,而是赵得柱“,不知道这是不是他的真实名字。


当我看到《重开博客》以及2020年注册的新域名所发文章《1587》,我深有感触。自从我2016年12月29日重建博客以来,对于他提到的问题,我也被影响过,我也思考过。这些问题,我将直接引用“槽边往事”的内容叙述,并在引用之后,讲述自己的思考。对我来说,能够支撑到今天,靠的是一种更猛烈的坚持,这种坚持除了要求自己坚持思考和写作之外,也是在坚持一些“反抗”。

博客算是网络近现代史上的一款老产品,在中国早已经式微。尤其是移动互联网的兴起,让人们大规模地转移到App里去,不再写长文,而是以发短文字、图片和视频为主。所以,博客在中国已经完全过气,而我这样的行为应该算作是一种复古。

类似的事情,包括我在内已经有无数的人曾经提起。

对不少人来说,不仅仅是“不再写长文,而是以发短文字、图片和视频为主”,而且连阅读长文的能力都已经退化甚至丧失。打开一篇长文之后,心浮气躁之下草草看两眼就关掉,只愿意阅读包含图片和视频的短文。

这一点,在独立博客圈表现同样非常明显。在一些以记录日常为主的博客中,包含着很多图片的短文,下面的评论就有很多;而我的博客当中,上千字甚至两三千字的长文下面评论数则少得可怜。

每家大公司建立起一个平台,把内容和用户全部集中在自己的App里。

他们习惯了打开App,并且将这种动作视为上网本身。

这些App通过这些方式实现了流量内循环——利用用户的人际关系进行捆绑,并限制外链、限制跨平台分享。APP内包含着无数不透明且动态变化的“红线”,于是靠标题党和谣言组成绝大部分内容,将人们推进“娱乐至死”的怪圈中。

有些人将这种现象视为国内互联网发展的“趋势”,似乎这是不以人们意志为转移的时代发展“潮流”。而我却不这样认为。

我认为,国内互联网背后有一只“手”,无时无刻不在操纵这一切,有意将国内互联网创造成这个样子,目的很明确:让绝大多数人愈发心浮气躁,进而丧失逻辑思维和思考能力,成为一名只能被动接受由他们编撰(抑或是杜撰)的一切知识、思想和情绪的机器。这个目的对哪些人利好,懂的都懂。

只不过,总有那么一戳人是例外。

只使用手机上网的人,和同时使用台式机电脑、笔记本电脑、平板电脑、智能手机的人,完全是不同的两类人。简单说起来,只会用手机上网的人不大适合阅读,他们的行为习惯是快读扫读,然后就要留言发表看法,并且喜欢在留言区里骂人。会使用电脑,熟练进行Web上操作的人,毫无疑问眼界要相对宽广一些,多少见识过一点世界,这些人还保留有阅读的习惯,也知道讨论的形式和规则……这样的读者群和这样的讨论,一旦产生之后就可以保留在互联网上,可以为搜索引擎所查找,于是就对所有人提供了永续的价值。

根据我的经验,将“会使用电脑,熟练进行Web上操作的人”都描述为“眼界要相对宽广一些,多少见识过一点世界”过于绝对,但是,这类人确实要比“只使用手机上网的人”在阅读和讨论方面有太多的优势。

海浪撞击海岸的鸟瞰图。
田野的鸟瞰图。一条道路穿过右上角。

不知道您是否听说过上面图片中的两本书。奥威尔的书描述了人们出现“对真实世界认知能力的毁灭,更是人自我意识的毁灭”;赫胥黎的书描述了“科技并没有令社会的人民精神进步,反而让社会文化倒退”。现如今,二者都存在,并且是二者的有机结合。

背后的那只“手”,有足够的能力对这两类人分别施加类似于两本书中描述的“法术”,拿捏的恰到好处,无懈可击。

和菜头在文章中还提到:

十五年前,我是用WordPress架设博客,购买了独立域名,委托朋友帮我购买了虚拟机。唯恐访问速度慢,唯恐国内读者看不到,唯恐搜索引擎优化不足,唯恐博客界面难看。为此我花费了许多时间和精力,申请过ISP,替换过不知道多少套模板,用了许多种性能优化插件。

我可能还要考虑是不是在GitHub上架设一个静态博客,是不是要在Typecho和Hexo之间做选择?因为blogger和WordPress已经不是最流行的了,用起来不够前卫。

我也有一部分相似的经历,而我折腾的更多。

2016年12月底重建博客之后,我花费了很多时间折腾。我折腾过TypechoZblog PHPMovableType阮一峰的网络日志使用的程序)、FlatpressGhost(自托管)、PivotX(已停止开发)、Farbox 2.0(折腾的掉头发,再也不玩这个了),以及一些我已经记不住名字的程序。我还尝试建立Jekyll、Hexo和Hugo三类静态博客。最新又想折腾Halo程序,但我没有闲置的VPS了,也没有足够的闲暇时间。

我自己的博客使用的程序,从2011年到现在,经历过WordPress、Jekyll、Zblog PHP和Typecho之后,又回到了WordPress。现如今,Litespeed环境,无论是开源的OpenLitespeed,还是针对单个网站免费的Litespeed Enterprise,都对WordPress和其他一部分PHP程序提供了足够的优化,速度丝毫不差。WordPress使用起来难度最低,有足够的、完善的资料可供独立查找。因为,在简体中文圈,在那只“手”的操纵下,有很多人的戾气非常重,他们喜欢嘲讽求助者,而不是帮助求助者。最好的办法,是独立查找资料,询问可靠的人,而不是有求于那些嘲讽者。

图片来源:OpenLitespeed官网

真正的问题是什么平台看样子能够持续稳定地存在下去?以及今天才存在的特色问题:如何让一篇文章成为互联网上的文章,而不是App的内部文章?也就是说,它可以被搜索引擎找到,被他人简单容易地跨平台引用和链接,让我明晰地看到trackback和feedback。

你看,独立博客上的文章不就是互联网的文章吗?

我在文章中添加了对其他内容的引用和链接,都是跨平台的。


我的博客,并不像“槽边往事”一样拥有流量。反之,正如上文中提到的,评论数少得可怜;在inoreader和feedly的订阅量远少于以短文、丰富的图片为主的日常记录博客,也远少于记录较多但思考较少的博客。

要知道,“不再写长文,而是以发短文字、图片和视频为主”的现状,对那只“手”的操纵者而言是好事,可对我们呢?我意识到,我们被这只“手”操纵而丧失了重要的东西,影响的是我们自己的一生。

因此,我要“反抗”这只“手”制造的所谓“潮流”。

我不仅要多读书,多观察这个世界的不同角落,多记录,多思考,并且要保留自己写作长文的能力,增强自己写作长文的动力。因为在写作长文的过程中,可以将自己积累的思考通过一定的逻辑记录下来,不仅记录了世界最真实的样子,而且还锻炼了那只“手”试图抹杀掉的能力,这二者都很有价值和意义。

我的棱角,并没有全部被这只“手”磨平,有些反而更尖锐了。

❌