0

我正在尝试在用户注册时插入/更新帖子元。在编写该操作之前,我正在页面上测试此代码,因此每当页面刷新时,它都会插入/更新帖子元。

问题:但是,下面的代码没有在 post meta 中插入/更新任何内容。谁能告诉我这段代码有什么问题或如何解决?

$groupItem = get_post(123);

if ($groupItem && $groupItem->post_type == 'cpt_group') {

    $meta     = 'group_users';
    $user_ids = get_post_meta($groupItem->ID, $meta, TRUE);

    if ( ! $user_ids) {
        $user_ids = [];
        add_post_meta($groupItem->ID, $meta, array_push($user_ids, 26));
    } else {
        update_post_meta($groupItem->ID, $meta, array_push($user_ids, 26), $user_ids);
    }
}
4

2 回答 2

0

这未经测试,但我认为这应该有效。

get_post_meta自动序列化数据库中的数组,但它也会反序列化。去掉假的。

我对您问题中的 if 语句感到有些困惑。如果这不是你想要的,我可以更新它。但这会更新 post_meta

    $groupItem = get_post(123);

    if ($groupItem && $groupItem->post_type == 'cpt_group') {

        $meta     = 'group_users';
        $user_ids = get_post_meta($groupItem->ID, $meta); // without false, it returns an array

        // user_ids is an array
        $user_ids[] = '26'; // Array Push
        // update_post_meta - if not already set, it will set it.
        update_post_meta($groupItem->ID, $meta, $user_ids); 
    }    
于 2020-03-09T10:18:27.777 回答
0

您可以使用序列化数据而不是 php 数组到 meta_value。

查看serialize()unserialize()函数。

他们正在将对象或数组转换为文本表示形式,以将其保存到数据库中的文本字段中。

当你收到数据时,你需要反序列化它,你会得到你保存的对象或数组

于 2020-03-08T22:20:14.060 回答