Я использую WooCommerce с Wordpress и добавил некоторые пользовательские поля в кассу:Обновление меты пользователя после того, как WooCommerce процесса контроля формы
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
и выполнить эту функцию для обновления метаданных пользователя.
Канонический ответ можно найти здесь (http://stackoverflow.com/a/36732816/667903). – Steve