当你在 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