Обновить мета-мету пользователя после процесса оформления заказа woocommercePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обновить мета-мету пользователя после процесса оформления заказа woocommerce

Сообщение Anonymous »

Я использую woocommerce с Wordpress и добавил в оформление заказа несколько настраиваемых полей:

Код: Выделить всё

add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

$extra_fields = array('job_title', 'company', 'telephone', 'occupation');

foreach($extra_fields as $key => $value) {

woocommerce_form_field($value, array(
'type'          => 'text',
'class'         => array('my-field-class form-row-wide'),
'label'         => __($label),
'value'         => '',
), $checkout->get_value( $value ));

}
}
В настоящее время они отображаются при оформлении заказа нормально, не уверен, что использование woocommerce_after_order_notes правильно в этом случае. Я также добавил в метаданные пользователя несколько настраиваемых полей, которые соответствуют полям, добавленным при оформлении заказа, и все они отображаются на странице профиля пользователя:

Код: Выделить всё

function add_contact_methods( $contactmethods ) {
$contactmethods['job_title'] = 'Job Title';
$contactmethods['company'] = 'Company Name';
$contactmethods['telephone'] = 'Telephone';
$contactmethods['occupation'] = 'Occupation';
$contactmethods['refer'] = 'How you heard about us?';
return $contactmethods;
}
add_filter('user_contactmethods','add_contact_methods',10,1);
Как вы можете себе представить, если я обновлю любое из этих полей на любой странице профиля, оно будет работать нормально, но, похоже, я не могу обновить метаданные пользователя при новом пользователь совершает покупку, метаданные пользователя для этих полей в базе данных не обновляются.

Я во многом понимаю, как это работает, и понимаю, что мне нужно подключиться к Процесс Woocommerce для добавления полей в процесс. Поэтому я также добавил этот код в свои функции:

Код: Выделить всё

add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');

function my_custom_checkout_field_update_user_meta( $user_id ) {
global $extra_fields;
foreach($extra_fields as $key => $value) {
if ($_POST[$value]) update_user_meta( $user_id, $value, esc_attr($_POST[$value]));
}
}
Изюминка в том, что это работает, если пользователь, который уже вошел в систему как участник, совершает повторную покупку и проходит проверку — причина, по которой это работает, заключается в том, что $ user_id уже существует, но когда новый пользователь оформляет заказ, он еще не существует как пользователь, поэтому функция не может обновить мета-данные пользователя NIL, где $user_id не существует .

Мой вопрос: как мне подключиться к процессу оформления заказа, предположительно ПОСЛЕ того, как пользователь был создан, чтобы я мог получить $user_id возвращается и выполните эту функцию, чтобы обновить метаданные пользователя.

Подробнее здесь: https://stackoverflow.com/questions/178 ... rm-process
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»