这不是$tables 变量does,andthere is no such thing as a registered custom table. 这些变量是内部API,不供插件/主题开发人员使用。这个$wpdb->mytable 模式本身就是一些人所做的事情,因为他们想避免在早期WordPress文章中流行的手动前缀。
您的代码无法正常工作的原因是,它在set_prefix/set_blog_id 方法由设置这些变量的核心调用。大多数人都是通过$wpdb->mytable = $wpdb->prefix . \'mytable\'; 这实际上是什么set_prefix 和set_blog_id 内部执行。
这些函数由调用wp_set_wpdb_vars 它被标记为私有、内部,不供插件或主题开发人员使用。它运行在wp-load.php 这意味着要使代码正常工作,需要将其移动到WordPress核心本身,并移动到加载过程的早期。
https://developer.wordpress.org/reference/functions/wp_set_wpdb_vars/
然而,你试图做的是不好的实践,不是一件好事。相反,请考虑以下选项之一:
返回带有前缀的表名的函数,该前缀是一个包装器对象,其方法如下insert/update/delete 将SQL查询抽象出来以简化代码,或定义一个常量或自定义post类型,我建议您选择选项1,因为您已经有了一个对象,$this->table 或$this->table_name() 更简单,更符合OOP。输入的字符更少。
一般来说,自定义帖子类型通常被认为是加速WordPress的一种可靠/快速的方法,但除非您知道如何仔细构造表并添加适当的索引,否则这并不能保证它会更快,实际上可能会慢得多。大多数速度的提高并不是因为使用了自定义表,而是因为post meta不再通过meta_query.
除非您需要与非WordPress数据库表/应用程序集成,或有特殊独特的数据存储要求,需要专业数据和查询(例如,按半径搜索地理数据、大型有向图),否则定制表在WP站点中很少是合适的,也很少是开发人员时间的最佳利用。