我有一个前端应用程序,它执行以下操作:
在前端选择的选项是自定义字段(post_meta),要更新的用户配置文件中的字段也是自定义字段,但在本例中为user_meta自定义字段
我有很多字段,有些有单个值,有些有很多选项(复选框自定义字段有6个选项)
我的代码确实正确地将前端中选择的所有帖子自定义字段的值传递给用户配置文件自定义字段,只要字段是单值字段
对于复选框,它不会更新用户字段pendant
复选框字段具有上述6个选项,因此它不是单个值,但我假设有一个值数组。
这是我的代码,请参阅内联评论
只要自定义字段和用户配置文件字段只包含一个值
,代码就能很好地工作function user_save_data_action($post_id, $form_data) {
if ($form_data['id']==210) {
//get curretn user's ID
$user_id = get_current_user_id();
//get skype field value suer submits in post (single value)
$skype = get_post_meta( $post_id, 'wpcf-skype', true );
//update the user field with this value
update_user_meta($user_id, 'wpcf-skype', $skype);
//repeats as above
$phone = get_post_meta( $post_id, 'wpcf-phone-number', true );
update_user_meta($user_id, 'wpcf-phone', $phone);
$pic = get_post_meta( $post_id, 'wpcf-profile-photo', true );
update_user_meta($user_id, 'wpcf-profile-image', $pic);
//now the trouble part, this is a checkboxes field, 6 options can be chosen (languages) before submitting the post
//the Custom Field (for post) name is wpcf-languages
//get the values form the Custom Field that user submits
//my checkbox field with 6 options, false because I want a array, right?
$langs = get_post_meta( $post_id, 'wpcf-languages', false);
//separate the options received, get the value of each option of the Custom Field (checkboxes wpcf-languages)
$new_lang = array();
foreach( $langs as $lang ) {
$new_lang[] = $lang->value;
}
//then update the Wordpress user_meta profile field (custom field as well, name is wpcf-support-languages)
update_user_meta($user_id, 'wpcf-support-languages', $new_lang);
//below I do some other staff that also correctly works.
//Update slug with user_name
$custom_title = wp_get_current_user();
$new_title = $custom_title->user_login;
//collect data and define new title
$my_post = array(
'ID' => $post_id,
'post_name' => $new_title,
'post_title'=> $new_title,
);
// Update the post into the database
wp_update_post( $my_post );
}
}
add_action('cred_save_data', 'user_save_data_action',10,2);
值得一提的是,我尝试了很多不同的方法,我不会在这里分享它们,因为它会简单地使用非工作代码来混淆帖子。
基本上,我知道我必须以某种方式从wpcf语言中获取所有选项,然后更新wpcf-support-languages中的所有选项
我已经完成了所有var_dump等问题,问题是,我不需要知道"什么"它返回(我已经知道,它返回6个选项,值是否经过检查)
我需要知道如何使用。
更新用户字段我可以手动检索数据库,更新用户meta_fields,传递数组中每个字段的名称和值,如下所示:
$lang_array = array(
"wpcf-fields-checkboxes-option-9f3e73c981257b02b9ea5dd006b8fcf9-1" => $English,
"wpcf-fields-checkboxes-option-ea8fcf9b3859a64eed39e169c9d6e42e-1" => $German,
"wpcf-fields-checkboxes-option-b9e50423feb4d0adcd90a7a0a9dc34d6-1" => $Spanish,
"wpcf-fields-checkboxes-option-e7f388081cbee7db725dec32df09b30f-1" => $French,
"wpcf-fields-checkboxes-option-574adb7dec19fad81973a4c3b323b898-1" => $Italian,
"wpcf-fields-checkboxes-option-e2d4422868a74ea8cbc85ab2d70943f7-1" => $Arabic,
"wpcf-fields-checkboxes-option-8ee5abd3454446fb0423a6c5300126b9-1" => $Russian,
"wpcf-fields-checkboxes-option-16d64ea0842251287f056a9eebecf756-1" => $Chinese,);
update_user_meta($user_id, $lang_array , $lang);
但是任何人都可以看到,这不是我想要的,这将始终将所有选项设置为" true"并且用户仍然无法从前端编辑他的WordPress配置文件,就像他可以使用Skype,电话等单个字段一样。
非常欢迎任何解决方案或指向