Я использую плагин cmb2 для создания сгруппированных пользовательских мета-полей для пользовательского типа сообщения. все с той стороны работает нормально.
я также создал пользовательскую форму в интерфейсе, чтобы полностью обновить пользовательский тип сообщения.
проблема, которую я имею, состоит в том, что мои сгруппированные пользовательские мета-боксы не обновляются.
если я проверяю базу данных после того, как я обновил пользовательский тип записи из области администратора, значение meta_value в базе данных выглядит так:
a:3:{s:4:"name";s:4:"tony";s:3:"dob";s:10:"11/02/1982";s:10:"occupation";s:6:"driver";}
но когда я обновил пользовательский тип записи из внешнего интерфейса, используя пользовательскую форму, значение meta_value в базе данных выглядит так:
s:87:"a:3:{s:4:"name";s:4:"tony";s:3:"dob";s:10:"11/02/1982";s:10:"occupation";s:6:"driver";}";
почему-то бит данных в начале:
s:87:"
добавляется при сериализации массива данных и приводит к тому, что мои данные не отображаются в области администратора на экране редактирования после публикации.
ниже приведен код, который я использовал для обновления пользовательского типа сообщения из внешнего интерфейса:
$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)));
}
}
заменить:
add_post_meta($pid, $k, serialize($v2));
с:
add_post_meta($pid, $k, $v2);
я обнаружил, что функция add_post_meta уже сериализует данные, поэтому мне не нужно было использовать serialize (), который снова сериализует данные.
Других решений пока нет …