Избегайте формы оплаты WooCommerce Checkout для перезаписи пользовательских данных WordPress по умолчанию

в базе данных у нас есть metauser таблица, содержащая:
first_name а также last_name поля

Это имя и фамилия WordPress по умолчанию.

А также имеем:
billing_first_name а также billing_last_name.

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

Я пробовал много вещей, используемых действий, как:

woocommerce_before_checkout_billing_form

или же

woocommerce_after_checkout_billing_form

Также попытался обновить мета с:

update_user_meta()

Но это не работает.

Я хочу, чтобы он не перезаписывал значения по умолчанию first_name и last_name,
но сохраните новые значения только в billing_first_name и billing_last_name

Я думаю, что процесс по умолчанию так
https://gist.github.com/claudiosanches/ae9a8b496c431bec661b69ef73f1a087

Любая помощь по этому вопросу, пожалуйста?

1

Решение

Способ состоит в том, чтобы использовать пользовательскую функцию, подключенную woocommerce_checkout_update_customer Хук действия:

add_action('woocommerce_checkout_update_customer','custom_checkout_update_customer', 10, 2 );
function custom_checkout_update_customer( $customer, $data ){

if ( ! is_user_logged_in() || is_admin() ) return;

// Get the user ID
$user_id = $customer->get_id();

// Get the default wordpress first name and last name (if they exist)
$user_first_name = get_user_meta( $user_id, 'first_name', true );
$user_last_name = get_user_meta( $user_id, 'last_name', true );

if( empty( $user_first_name ) || empty( $user_last_name ) ) return;

// We set the values by defaul worpress ones, before it's saved to DB
$customer->set_first_name( $user_first_name );
$customer->set_last_name( $user_last_name );
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Протестировано и работает в WooCommerce 3+

4

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

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

По вопросам рекламы [email protected]