Better post meta efficiency?

时间:2013-02-27 作者:Michael Ecklund

我处理的网站要求在特定的帖子类型中使用Post Meta作为帖子对象。

我经常在特定的帖子类型中添加一个元框,为正在创建的新帖子对象提供其他设置。

你可以想象,到现在为止,我已经创建了几个类,这些类可以使后期元管理更容易地满足我的日常需要。

我已经习惯了总是在所有自定义字段键前加前缀的做法。我决定总是使用我的缩写,然后快速参考字段的内容。

例如,如果要向特定帖子类型中的所有帖子对象添加可见性设置。自定义字段键前缀可能如下所示:mbe_visibility_.

因此,如果我有一个Post对象的“全局”自定义字段。它可能看起来像:mbe_visibility_global.

我目前有一个函数,可以获取Post对象的所有自定义字段,然后遍历返回的字段,只过滤出具有字段键前缀的字段(mbe_visibility_).

因此,如果我有三个自定义字段:Global, Post Types, 和Posts, 我有三个键(每个键包含一个值,在保存Post对象时指定):mbe_visibility_global, mbe_visibility_post_types, 和mbe_visibility_posts.

现在是我的问题开始形成的地方。

我觉得这有点过头了,获取/过滤WordPress core和网站上其他插件分配的所有自定义字段。

我在考虑改变自定义字段存储/引用Post Meta的方式。

不要为每个自定义字段保存新的Post元键,而是将所有自定义字段保存在该Post对象的一个Post元键中。

我的方法是$_POST 将数据放入一个数组中。因此,元框中的输入字段可能如下所示:<input type="checkbox" name="mbe_visibility[general][global_visibility]" value="\'.$value.\'" />

所以现在当你save_post 您只需检查是否有一把钥匙可用。

if(isset($_POST[\'mbe_visibility\'])) 只需将整个数组保存到一个Post元键中。

update_post_meta($post_id, \'mbe_visibility\', $_POST[\'mbe_visibility\']) 可能应该在保存之前清理/验证数据,但这只是一个示例。

现在,要从Post对象的Post Meta引用任何自定义字段,我所要做的就是:get_post_meta($post_id, \'mbe_visibility\', true) 我将为这个Post对象专门提供我想要的内容,而不必从WordPress核心或其他杂项插件获取和过滤所有其他不需要的Post Meta。

如果你听了我冗长的解释,问题是:Is it a bad idea to store all of your custom fields into one post meta key, for easier data management? VS. Storing each of your custom fields in individual post meta keys for each custom field.

当然,我希望看到一个合理的解释来支持你的答案。

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

如果您需要通过meta_key/meta_value 然后不要将它们存储在单个密钥中。如果存储为单个键,则必须将数据存储为serialized 字符串或类似的东西。您可以搜索的唯一方法是通过效率低下的%LIKE% 也可能容易出错的查询。如果需要对任何值的查询进行排序,则类似的情况也是如此。您无法从序列化字符串中获得任何合理的类人字母或数字排序。如果您预计可能需要在数据库级别执行任何操作,请将其存储为单个meta_keys.

然而,如果您所需要的只是通过meta\\u键将数据作为一个整体块从数据库中拉出,那么您就可以了。

结束

相关推荐

Identifying Importer Posts

如果一个站点有100篇帖子,其中有数量不详的帖子是手动编写的,其余的帖子是使用WordPress导入器创建的,那么在没有访问远程站点或原始导入文件的情况下,我如何以编程方式识别导入的帖子?E、 g.这篇文章是由进口商工具创建的吗?