У меня есть форма, где пользователь регистрируется на событие, и если они хотят, они могут на лету обновлять некоторые из своих платежных данных.
У меня есть список информации, которую они могут обновить, например
$inputs = array(
'billing_city' => 'City',
'billing_postcode' => 'Postcode',
'billing_email' => 'Email',
'billing_phone' => 'Phone',
);
Затем я попытался использовать WC_Customer
класс для обновления измененной информации:
$customer = new WC_Customer( get_current_user_id() );
foreach ($inputs as $key => $label ) {
$method = 'set_'. $key;
$customer->$method( $value );
}
Казалось бы, достаточно просто. Тем не менее, платежная информация не изменяется.
Что я делаю неправильно? Есть ли какая-то другая функция, которая должна решать эту проблему?
Документация Woocommerce мало что объясняет.
Вы можете сделать это с помощью update_user_meta()
функция, таким образом:
$user_id = get_current_user_id();
$data = array(
'billing_city' => $city_value,
'billing_postcode' => $postcode_value,
'billing_email' => $email_value,
'billing_phone' => $phone_value,
);
foreach ($data as $meta_key => $meta_value ) {
update_user_meta( $user_id, $meta_key, $meta_value );
}
Вам нужно будет установить значения в массиве.
Вы должны сохранить изменения после настройки свойств. В вашем коде после foreach добавьте:
$customer->save();
И вуаля!