WordPress 主题越来越像应用,调试成本却没人提
昨天帮人看一个主题,functions.php 一千二百多行,inc 目录塞了十九个文件。我就想改个文章列表的分类显示,找了四十分钟才定位到。这事不新鲜,但我觉得方向有点问题。以前的主题是模板,现在是框架十来年前写 WP 主题,header
昨天帮人看一个主题,functions.php 一千二百多行,inc 目录塞了十九个文件。我就想改个文章列表的分类显示,找了四十分钟才定位到。
这事不新鲜,但我觉得方向有点问题。
以前的主题是模板,现在是框架
十来年前写 WP 主题,header.php、index.php、single.php 三四个文件就够。现在打开一个商业主题,先是一个 settings 面板,再来一堆 CPT 注册,还有自研的区块、自研的懒加载、自研的 SEO 模块——什么都自己来一遍。
好处当然有,功能全,装上就能用。代价是你要改任何一处,都得先读懂作者那套抽象。
我上个月想给一个主题加个「置顶第一篇文章、其余按时间排」的需求。正常写法几行 WP_Query 的事。结果主题自己包了一层查询,参数名全是内部约定,文档里没有。翻代码翻到凌晨。
调试工具没跟上复杂度
WP_DEBUG 那套东西,从我用 WordPress 到现在基本没变过。可我们面对的东西变了,一堆钩子嵌套、一堆积压的查询、一堆 setup_postdata 忘了 reset 的地方。
Query Monitor 帮了大忙,这个我认。它能告诉你这个页面跑了多少查询、哪些钩子挂了谁。但它不会告诉你「这行代码是主题作者故意的还是写错了」。
前两天我遇到一个典型:主题在 pre_get_posts 里改了主循环的 posts_per_page,但同时忘了判断 is_admin。后台列表页也被改了,编辑一页只能看五篇。用户以为是 WordPress 坏了。
这锅该谁背?说实话不好说。WP 给了 hooks 又不加约束,主题作者图省事全挂主循环上,最后埋单的是不懂代码的用户。
我的判断
我在挑主题时现在会先看两件事:inc 目录有多少文件,functions.php 有多少行。超过五百行我就有点犹豫。
不是说写得长就一定烂。但长到那个程度还没拆干净,说明作者默认你不需要改。
这趋势会不会回头?我觉得短期不会。区块主题和全站编辑推了几年,复杂度没降,只是从 PHP 挪到了 JSON。
想要可控,可能还是得自己写,或者找一个明确说过「这是个开发用起始主题」的东西。这话有点丧,但确实是我现在的选择。