Update post meta dynamically

时间:2020-03-08 作者:pixelngrain

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

Question: 然而,下面的代码并没有在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);
    }
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

基本上,你没有正确使用array_push().

array_push() 修改原始/输入数组passed by reference 并返回数组中新的元素数。

因此add_post_meta( $groupItem->ID, $meta, array_push( $user_ids, 26 ) ), 实际上,您正在将meta值设置为$user_ids 而不是数组中的项—例如,add_post_meta() 会得到1 而不是[26].

所以如果你想使用array_push(), 你可以这样做:

if ( ! $user_ids ) {
    $user_ids = [];
    array_push( $user_ids, 26 );
    add_post_meta( $groupItem->ID, $meta, $user_ids );
} else {
    $prev_user_ids = $user_ids; // backup old values
    array_push( $user_ids, 26 );
    update_post_meta( $groupItem->ID, $meta, $user_ids, $prev_user_ids );
}
或者简单地使用$user_ids[] = 26; ..

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在