TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 569 subscribers
Post #1256 7
ACF Pro Custom Tables 对接 WordPress Multisite 网络级数据

当你在 WordPress Multisite 中使用 ACF Pro Custom Tables 时,默认每个站点会创建独立的数据表(如 wp_1_learner)。然而,当需要全体站点共享同一套学习者数据时,这种结构会带来重复与同步问题。

作者在 eCoach 项目中遇到了这一挑战。他希望保持 ACF 的管理界面,但数据库层必须实现网络级共享。最终方案是:不修改 ACF 内核,而是用自定义插件创建基于 $wpdb->base_prefix 的表,并通过 acf/load_value 和 acf/save_post 钩子桥接数据。ACF 仍负责字段编辑体验,自定义插件负责存储架构。

问题核心:$wpdb->prefix 产生 wp_1_learner(站点专属),$wpdb->base_prefix 产生 wp_learner(全网共享)。ACF 默认使用站点上下文,因此无法直接创建网络级表。

方案:自定义插件利用 $wpdb->base_prefix 创建 wp_learner 和 wp_learner_meta 表;通过 ACF 钩子将加载/保存操作映射到全局表。示例代码:

```
add_filter( 'acf/load_value/name=learner_status', function ( $value, $post_id, $field ) {
global $wpdb; $table = $wpdb->base_prefix . 'learner';
// 从共享表读取数据
return $value;
}, 10, 3 );

add_action( 'acf/save_post', function ( $post_id ) {
global $wpdb; $table = $wpdb->base_prefix . 'learner';
// 写回共享表
}, 20 );
```


这一教训提醒我们:在 Multisite 中数据表前缀不只是命名规则,它代表数据所有权——是归单个站点还是整个网络。架构设计应当先问“数据属于谁”,再决定如何存储。

#开发者 #工具 #WordPress #Multisite #ACFPro #CustomTables #PHP #数据库架构
@DevToolboxHub
More from @devtoolboxhub
  1. Oct 1, 2026给 AI 代理建一份「自欺清单」 维也纳邮政与邮件服务商 Postservice.at 创始人 Stephan Holzbach 不是开发者,但今年公司大部分工作跑在 Claude…
  2. Oct 1, 2026代码评审评论为何比本意更刺耳 一条评审评论大约四十秒写完,通常夹在两件事之间,写的人清楚自己的语气。读的人刚在这份代码上花了三天,正想收尾,而且听不到你的声音,于是自己补上一种语气…
  3. Oct 1, 2026用 Hindsight 给客服 Agent 加上持久记忆 大多数客服 Agent 只擅长回答眼前这条消息。真正难的是同一个客户一周后再来,Agent 完全不知道之前发生过什么。作者…
  4. Sep 30, 2026AMSI 绕过技术 2026 开发者指南 AMSI(Antivirus Malware Scan Interface)是 Windows 的恶意脚本扫描接口,覆盖 PowerShe…
  5. Sep 30, 2026AI Agent 为什么记不住事 和 AI Agent 协作时最容易注意到的一点是:它们很擅长回答问题,却不擅长记住昨天发生过什么。你可以和它长聊一轮,做出一堆决定、说明偏好、一起…
  6. Sep 30, 2026wpipe:面向 Python 开发者的轻量编排库 wpipe 是一个纯 Python 可嵌入的编排库,目标是让数据管道的开发回到「编辑—运行—调试」的快速循环,而不必为验证业务逻…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →