Я использую 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
и выполнить эту функцию для обновления метаданных пользователя.