我在wordpress中使用自定义字段来存储元值。某些自定义字段具有多个值。我正在检索带有“get post meta”的数组,它返回一个数组,正如预期的那样。但似乎不同的物品是在没有任何逻辑的情况下订购的。有些人按照他们输入的顺序出现,其他人出现相反的顺序,有些混乱......我可能会失踪什么?
我无法改变项目的存储方式..数据库中的条目太多,值在编辑区域显示完美,但在数组中以不同的顺序存储。
答案 0 :(得分:0)
这可能是也可能是不可能的。 Wordpress有点像自由能机器 - 它违反了一些有用的概念。
您的所有元数据都存储在postmeta
表中。此表包含几个字段:元ID,帖子ID,元键,值。每次添加元数据时,都会向此表添加一行。但是,每次更新元数据时,都不会更改行顺序。
get_post_meta
通常以相同的顺序返回行,所以我猜你正在某处进行某种排序。我们能看到一些代码吗?如果它总是在升序或降序但从不作为随机混合,那么你会在某处丢失sort()
。
答案 1 :(得分:0)
我最近才遇到同样的问题,这是我发现的:
当您使用get_post_meta()
时,WordPress会检查是否已加载给定对象(post)的元数据;如果它有,那么它在对象缓存(volatile,apc,memcached等)上并从那里加载它。
如果元数据不在对象缓存中,那么它会通过update_meta_cache()
加载该对象的所有元数据,ORDER BY
在没有{{1}}的情况下查询数据库
如果您的存储引擎是MyISAM,则每次更新元数据时都会以随机顺序返回结果,但使用InnoDB时返回结果的顺序似乎是一致的 (至少在我的测试中)