为 Wordpress 存储自定义数据的最佳实践是啥

Posted

技术标签:

【中文标题】为 Wordpress 存储自定义数据的最佳实践是啥【英文标题】:What is best practise for storing custom data for Wordpress为 Wordpress 存储自定义数据的最佳实践是什么 【发布时间】:2017-07-06 23:31:06 【问题描述】:

上下文:我需要为网站创建一个包含大量自定义项和相当多字段(20 多个)的表单,而不是安装插件并修改它(或学习插件的API)我决定编写自己的插件。由于我是从头开始执行此操作,因此必须回答存储数据的问题。

大多数人会建议使用自定义帖子类型和元数据而不是自定义表格,虽然我熟悉自定义帖子类型和分类法等,但我想知道这是否最适合相当于日志的纯数据存储。

该表单是一次性使用的,我存储的数据将无法在网站的前端访问,只能在 WP-admin 上“查看”,而且很可能只是一个带有可过滤的表。

所以问题是这是否需要使用自定义帖子类型和元数据,或者我应该只创建一个表并使用 $wpdb 类,因为这简化了 CRUD 并且仍然坚持“Wordpress 方式”的做事方式。

阅读:This post 为自定义表提供了一个很好的案例,特别是因为他们的示例是关于存储私有数据的,因此出现了效率和隐私问题。 This question,几年前的回答有相反的意见,但用例不同,因为存储的数据是为了公开展示。

【问题讨论】:

恕我直言,您将需要大量流量才能开始担心效率,即使如此,在您需要查看全新结构之前,您仍可以通过代码、服务器和数据库来做一些事情。 在安全和隐私方面,与使用 WP 相对成熟且久经考验的系统的数百万其他网站相比,您的情况有什么特别之处吗?使用您的网站,如果具有特定角色和权限的用户以某种方式获得了他们不允许查看的数据的访问权限......那么您必须查看您的插件和主题并找出原因/方式。如果您担心黑客进入数据库或服务器文件……那始终是一个问题,并且可能有比 WP 更好的系统。 【参考方案1】:

我强烈建议使用单独的表格。 WP table postmeta 通常包含来自许多不同插件的大量信息,并且通常最终成为最大或最大的表格在数据库中。 除此之外,如果保存在 postmeta 表中,它也将始终部分保存在 posts 表中,因为这两者需要彼此才能连接和完成信息。因此,如果您要导出/导入到另一个数据库,您将不得不参与一个非常不愉快的过程,其中自定义帖子需要与上一个数据库中的 ID 相同 此外,如果在单独的表中,数据很容易访问,即使从 phpmyadmin 也应该很容易读取,如果您只有基本的 sql 知识,使用 $wpdb 类编写可过滤表应该很容易。所有这一切都来自我最近将 2 个大型 wordpress 网站合并为一个,并将大量信息保存为 postmeta 的经验......我真的希望大部分信息都保存在自定义表格中,因为它会影响我的生活容易得多。 使用元和自定义帖子类型的唯一原因是它更快更容易(至少在我的经验中)。希望这会有所帮助,我真的很想看看是否还有其他意见。祝你的项目好运!

【讨论】:

【参考方案2】:

有趣的问题!

对于这种情况,我通常使用(如您所提到的)自定义帖子类型和分类法。所以这就是我要走的路,我唯一有点害怕的是你提到的“..相当于一个日志..”

我很确定您最好使用单独的表,它只是通过 postmeta 表工作很糟糕。最后,如果你知道如何使用 $wpdb 类,你应该没问题!

期待其他人的意见

【讨论】:

【参考方案3】:

在大多数情况下,使用带有元数据的自定义帖子类型既简单又酷,因为它完成得很快,而且你可以使用所有很酷的 wordpress 功能。

最好在数据库中使用新表的情况是当您必须保存大量数据时,即访问日志或类似的。

WooCommerce(wordpress people 的一个插件)将产品保存为 CPT,所有属于元数据的数据。

【讨论】:

很好,您提到了 woocommerce,您对 woocommerce 组织数据的方式感到满意吗?我知道它符合 wordpress 标准,但在某些情况下,我希望它会以不同的方式构建。 是的,我很满意。我已经使用自己创建的导入脚本导入了多个 XML 目录,这些脚本使用常用的 wordpress 函数来存储所有产品数据。至少我店里有超过 5000 种产品,感觉很好;)

以上是关于为 Wordpress 存储自定义数据的最佳实践是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义Wordpress comment_form();

Angularjs 数据存储最佳实践

从我们仓库中其他 Snowflake DB 派生的数据中使自定义表保持最新的最佳实践

存储 UI 设置的最佳实践?

在 ios 框架项目中存储本地数据的最佳实践

将文本输出写入 S3 存储桶的最佳实践是啥?