道琼斯公司如何通过无头WordPress架构为编辑工作流注入强大动力
在本期WP Tavern Jukebox播客中,Nathan Wrigley与道琼斯公司的Joshua Bryant进行了对话,探讨了该公司如何利用无头(headless)WordPress架构来支撑《华尔街日报》等主要新闻网站。Joshua分享了他的团队如何将Gutenberg块编辑器与WordPress后台解耦,并将其嵌入一个独立的React应用程序中,从而实现了超快速、无干扰的新闻发布流程,这对于争分夺秒的突发新闻报道至关重要。
背景与业务需求:速度就是一切
Joshua Bryant在道琼斯公司工作,负责支持包括《华尔街日报》、《巴伦周刊》和MarketWatch在内的全球大型新闻网站。所有这些网站都运行在一个WordPress多站点平台上。他的团队面临的核心业务挑战是时间。在新闻行业,尤其是在报道市场波动或名人新闻时,领先竞争对手10秒钟发布,就可能意味着推送通知的送达率和影响力的巨大差异。
对于MarketWatch这样的财经媒体,编辑需要实时收听董事会会议,并能够瞬时将信息传递给读者。因此,传统的WordPress后台编辑流程——包含侧边栏、多个标签页和页面重载——成为了速度的瓶颈和编辑注意力的干扰源。
技术架构:解耦的“规划、编辑、呈现”三系统
为了应对这一挑战,道琼斯的技术团队将整个出版流程重构为三个完全分离的应用系统:
- 规划工具(React应用):一个基于React的单页面应用,用于协调编辑工作、规划故事流和分配资源。它无需页面重载,体验流畅。
- 编辑工具(解耦的Gutenberg):这是本次技术创新的核心。团队将Gutenberg块编辑器的核心编辑区域(仅保留段落和列表等必要块)从WordPress管理后台(WP Admin)中剥离出来,并嵌入到上述的React规划工具中。
- 呈现系统(前端):一个完全独立的系统,负责从“中央数据库”获取已发布的内容,并以各种形式展示在《华尔街日报》等网站的最终页面上。WordPress本身不负责前端渲染。
这种架构的关键在于,编辑在React应用中写作和点击“发布”时,内容通过WordPress REST API直接保存到传统的WordPress数据库中。这个过程跳过了加载整个WordPress管理后台的步骤,实现了近乎即时的发布。
核心技术实现:定制Gutenberg与模拟WP全局对象
Gutenberg的深度定制
团队没有重新造轮子,而是选择复用已在WordPress环境中投入大量业务逻辑和定制插件(如股票代码标记器)。他们在React应用中只引入了最少的Gutenberg模块:
- 仅保留段落(Paragraph) 和列表(List) 这两个核心块,因为对于突发新闻稿,这通常就是全部所需。
- 移除了左侧的块插入器和右侧的设置边栏,只保留中心的编辑区域,打造极致简洁的界面。
- 通过自定义代码,将部分关键的专有插件(如作者署名、公司股票代码标记)移植到该环境中,确保业务逻辑的一致性。
挑战与突破:模拟WordPress全局对象
将Gutenberg编辑器移出原生WordPress环境的最大技术挑战之一是模拟全局的wp对象。在WordPress中,各种脚本和包被抽离出来,通过这个全局对象统一调用,以提高效率。
而在独立的React应用中,这个对象并不存在。Joshua的团队经历了一段艰难的调试过程才发现这个问题。解决方案是:手动导入所需的WordPress包(如@wordpress/data),并在React应用的全局命名空间中重新创建这个wp对象,从而使Gutenberg代码能够正常运行。
发布流程
当编辑在极简的React编辑器中完成内容并点击发布时:
- 应用直接调用WordPress REST API的相应端点(如更新文章状态为“发布”)。
- WordPress后端接收到API请求,执行其常规的发布逻辑,将内容存入数据库。
- 内容随即被下游的前端系统获取并呈现给读者。
- 之后,编辑仍可以回到完整的WordPress后台对该文章进行二次润色、添加SEO信息、图片或视频,实现“先发布,后完善”的工作流。
成果与展望
该解决方案首先在MarketWatch部署,效果显著,随后无缝扩展至《华尔街日报》。它不仅将关键发布流程缩短了宝贵的数秒钟,还通过移除干扰界面,大幅提升了编辑在高压下的工作效率。
Joshua认为,这种“滥用”WordPress的方式虽然独特,但展示了其作为强大后端服务的潜力。它允许企业或开发者利用WordPress成熟的内容管理、用户权限和数据库功能,同时为不同的客户或场景构建完全定制化、技术栈各异的前端应用(如Vue、React等),实现“WordPress的强大功能,搭配任何所需的前端速度”。
Joshua表示愿意与社区分享更多技术细节,并希望看到这种模式能够在更广泛的场景中得到应用和创新。