自定义发布类型数据库持久性。为什么不行?

时间:2015-10-27 作者:e4rthdog

我的背景是。净/碳/拉维尔e.t.C

我开始非常喜欢WP,并开始自学如何使用WordPress作为开发框架。

我尝试了一些非常简单的方法。创建一个实体并在此实体上创建一个基本CRUD,然后将其显示在我的前端。没什么棘手的对吧?

所以在阅读之后,我发现一种方法是创建实体(aka Custom Post Type),创建自定义字段(aka my entity properties),并让WP backend执行CRUD。

然后我可以使用各种技术在前端显示数据。

令我大吃一惊的是,我发现CPT并没有保存在任何wp表中,当我禁用插件时,我丢失了CPT,但我没有丢失底层数据!!

想象一下我的惊讶,因为我习惯于拥有绝对的db完整性。

我想知道,为什么决定CPT以这种方式工作?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

我不认为有明确的答案(可能会有一些旧的讨论被埋没在门票中),但我可以提供一些历史观点。

WordPress没有使用自定义帖子类型启动。他们加入的时间相对较晚。虽然它们是模仿本地post类型的,但它们仍然是一种特例。

因此,这种拆分的概念已经存在了——post数据存储在数据库中,控制它的逻辑存储在运行时代码中,甚至在CPT存在之前。

此外,WP挂钩系统和插件激活/停用也支持运行时代码方法。在插件中实现激活/停用有点笨拙,大多数插件根本不需要这些例程。很长一段时间以来,主题甚至没有一种方法来运行激活/停用逻辑,而没有一些创造性的黑客。

此外,后期注册包含本地化字符串,WP本地化工作流通过从源代码中提取字符串来工作。将这些字符串存储在数据库中需要有两个不同的工作流来编译本地化字符串列表。以及在更新时使他们的更改变得非常复杂。

简而言之,该实现与WP历史和典型实践完全一致。

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register