我尝试做的是优化在wp_postmeta表中存储数据的方式。
我需要保存帖子之间的多个关系,我的出发情况就是这样:
add_post_meta($parent_id, 'post_child', $child_id);
通过这种方式,我需要为每个关系使用数据库行。
考虑到同一个父母可以与多个孩子相关联,我试图弄清楚什么是一个好的阵列配置,我得到了这样的东西(但我还是不确定是最好的方式):
array(
array(
parent => 121,
child => 122
),
array(
parent => 121,
child => 122
),
array(
parent => 121,
child => 123
),
...
);
然后,我尝试使用此代码:
if ($post_relations = get_post_meta($book_id, 'post_relations', true)) {
$post_relations[] = array("parent" => $parent_id, "child" => $child_id);
update_post_meta($book_id, 'post_relations', $post_relations);
} else {
$post_relations[] = array("parent" => $parent_id, "child" => $child_id);
add_post_meta($book_id, 'post_relations', $post_relations);
}
但是我在meta_value字段中得到的结果似乎与我期望的结果不同:
a:2:{
i:0;a:2:{s:6:"parent";i:1;s:5:"child";i:510;}i:1;a:2:{s:6:"parent";i:510;s:5:"child";i:511;}
}
答案 0 :(得分:0)
WordPress函数update_post_meta()
和add_post_meta()
都需要可序列化的数据;
update_post_meta ( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' )
$meta_value
如果是非标量
在数据库中看起来像这样,因为那些函数serialize()
是您传递它的数组。
因此,如果您要访问get_post_meta()函数之外的数据,则需要unserialize()
数据。
答案 1 :(得分:0)
我认为你应该将关系保存为每个帖子元的一个关系 - 保存数组中的关系会使DB查询变得非常困难。
因此,要么将关系保存为post_relations_0,post_relations_1等,要么更好,如果您打算进行一些查询,请将关系保存在单独的表中。