Добавление пользовательских полей в профиль WooCommerce

Добавление пользовательских полей в профиль WooCommerce

Konark 25 апреля, 2021 Комментариев (0)

Продолжение серии постов по полноценному добавлению кастомных полей, которые были добавлены на страницу Checkout.

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

Итак, сначала вешаемся на хук woocommerce_my_account_my_address_formatted_address и добавляем наши поля.

add_filter( 'woocommerce_my_account_my_address_formatted_address', 'woo_custom_my_account_my_address_formatted_address', 10, 3 ); 
function woo_custom_my_account_my_address_formatted_address( $args, $customer_id, $name ){
    $args['gender'] = get_formatted_gender( get_user_meta( $customer_id, $name . '_gender', true ) );
	$args['title'] = get_user_meta( $customer_id, $name . '_title', true );
	$args['addition'] = get_user_meta( $customer_id, $name . '_addition', true );

    return $args;
}

Напоминаю, на функцию get_formatted_gender обращать внимание не стоит, это моя кастомная функция для корректного вывода пола юзера.

Теперь вешаемся на хук woocommerce_formatted_address_replacements.

add_filter( 'woocommerce_formatted_address_replacements', 'woo_custom_formatted_address_replacements', 10, 2 );
function woo_custom_formatted_address_replacements( $replacements, $args ){
	$replacements['{gender}'] 	= $args['gender'];
	$replacements['{title}'] 	= $args['title'];
	$replacements['{addition}'] = $args['addition'];

	return $replacements;
}

Да, именно в таком стиле {имя_поля} которое мы добавили в предыдущем хуке.

И наконец-то, вешаемся на хук woocommerce_localisation_address_formats.

add_filter( 'woocommerce_localisation_address_formats' , 'woo_includes_address_formats', 10, 1);
function woo_includes_address_formats( $address_formats ) {
	foreach ( $address_formats as $address_key => $address ) {
		$address_formats[ $address_key ] = "{gender}\n{title}\n{name}\n{addition}\n{company}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}";
	}

    return $address_formats;
}

Цикл foreach не обязательно использовать, можно задать в стиле $address_formats[‘default’] или $address_formats[‘код языка’], но для корректной работы, я бы рекомендовал использовать цикл.

В итоге, это будет выглядеть так:

Пользовательское поле в профиле WooCommerce

Просмотров: 17

Добавить комментарий

Ваш e-mail не будет опубликован. Имя и e-mail обязательны для заполнения.