我处理的网站要求在特定的帖子类型中使用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.
当然,我希望看到一个合理的解释来支持你的答案。