Обновите пользовательское поле WordPress user_meta со значением настраиваемого поля post_meta

У меня есть приложение переднего плана, которое делает следующее:

  1. на странице WordPress по умолчанию пользователь выбирает некоторые параметры (пользовательские поля)
  2. Эти данные передаются в пользовательские поля user_meta при отправке сообщения

Параметры, выбранные в интерфейсе пользователя: настраиваемые поля (post_meta), поля в профиле пользователя для обновления также являются настраиваемыми полями, но в этом случае пользовательские поля user_meta

У меня есть много полей, некоторые имеют отдельные значения, другие с большим количеством опций (флажки Custom Field с 6 опциями)

Мой код правильно передает значения из всех пользовательских полей сообщений, выбранных в интерфейсе пользователя, в пользовательские поля профиля пользователя, если поля являются полями с одним значением

Когда дело доходит до флажков, он не обновляет подвеску пользовательских полей

Поле флажков имеет, как сказано, 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-languages, а затем обновить все параметры в wpcf-support-languages

Я сделал все var_dump и т. Д., Проблема в том, что мне не нужно знать, «что» он возвращает (я уже знаю, он возвращает 6 опций, значение проверено или нет)

Мне нужно знать, как обновить пользовательские поля с.

Я могу, извлекая вручную форму DB, обновить мета-поля пользователя, передавая имя и значение каждого поля в массиве следующим образом:

$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, выбирая его из Front-End, так же, как он может делать с отдельными полями, такими как Skype, Phone, и т.п.

Любое решение или указание очень приветствуются

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector