更新meta_value,为已存在的元素添加关联数组

时间:2016-06-16 14:48:50

标签: php arrays wordpress post-meta

我尝试做的是优化在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;}
}

2 个答案:

答案 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如果是非标量

,则必须是可序列化的

update_post_meta()

在数据库中看起来像这样,因为那些函数serialize()是您传递它的数组。

因此,如果您要访问get_post_meta()函数之外的数据,则需要unserialize()数据。

答案 1 :(得分:0)

我认为你应该将关系保存为每个帖子元的一个关系 - 保存数组中的关系会使DB查询变得非常困难。

因此,要么将关系保存为post_relations_0,post_relations_1等,要么更好,如果您打算进行一些查询,请将关系保存在单独的表中。