使用 add_post_meta 序列化

Ahm*_*m3d 1 php wordpress serialization metadata

我正在使用 cmb2 插件为自定义帖子类型创建分组的自定义元框。那一边的一切都运行良好。

我还在前端创建了一个自定义表单来更新整个自定义帖子类型。

我遇到的问题是我的分组自定义元框没有更新。

如果我在从管理区域更新自定义帖子类型后检查数据库,则数据库中的元值显示为:

a:3:{s:4:"name";s:4:"tony";s:3:"dob";s:10:"11/02/1982";s:10:"occupation";s:6:"driver";}
Run Code Online (Sandbox Code Playgroud)

但是当我使用自定义表单从前端更新自定义帖子类型时,数据库中的元值显示为:

s:87:"a:3:{s:4:"name";s:4:"tony";s:3:"dob";s:10:"11/02/1982";s:10:"occupation";s:6:"driver";}";
Run Code Online (Sandbox Code Playgroud)

出于某种原因,一开始的数据位:

s:87:"
Run Code Online (Sandbox Code Playgroud)

当我序列化数据数组并导致我的数据不在后期编辑屏幕的管理区域中显示时添加。

下面是我用来从前端更新自定义帖子类型的代码:

$current_user = wp_get_current_user();
$pid = get_page_by_title( $current_user->user_email,'OBJECT','application');

$post = array(
            'ID'    => $pid->ID,
            'post_title'    => $current_user->user_email,
            'post_status'   => 'pending',
            'post_type'     => 'application',
            'author'        => $current_user->ID
        );
        $pid = wp_update_post($post);
    }

    foreach($_POST as $k => $v){
        if(is_array($v)){
            delete_post_meta($pid, $k);
            foreach($v as $k2 => $v2){
                add_post_meta($pid, $k, serialize($v2));
            }
        }else{
            update_post_meta($pid, $k, esc_attr(strip_tags($v)));
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ahm*_*m3d 5

代替:

add_post_meta($pid, $k, serialize($v2));
Run Code Online (Sandbox Code Playgroud)

和:

add_post_meta($pid, $k, $v2);
Run Code Online (Sandbox Code Playgroud)

我发现 add_post_meta 函数已经序列化了数据,因此我不需要使用 serialize() 再次序列化数据。