@ligisayan

Как заменить в админке в статусе заказа гостя на зарегистрованного пользователя?

Всем привет! Есть магазин на woocommerce.
Вручную добавляю пользователя после сделанного им заказа.
Все бы хорошо, но в статусе заказа система определяет его как гостя, а хотелось бы, чтобы в этом поле отображался, как известный ей пользователь.
5c6fe524a5d08156838048.png
Как этого можно добиться? Вот мой код:
add_action( 'woocommerce_thankyou', 'create_user_callback' );
function create_user_callback($order_id){
   $order = wc_get_order( $order_id );
   $order_detail['customer_first_name'] = get_post_meta( $order_id, '_billing_first_name', true );
   $order_detail['customer_phone']      = get_post_meta( $order_id, '_billing_phone', true );
   $order_detail['customer_email']      = get_post_meta( $order_id, '_billing_email', true );
   $order_detail['customer_address']    = get_post_meta( $order_id, '_billing_address_2', true );
   $customers = get_users( array( 'role' => 'customer' ) );
   foreach( $customers as $customer ) :
	   $customers_email = get_user_meta( $customer->ID, 'billing_phone', true );
	   if($customers_phone!=$order_detail['customer_phone'] && $customer->user_email!=$order_detail['billing_email']) {
		 	$userdata = array(
				'user_pass'          => '123',
				'user_login'         => $order_detail['customer_email'],
				'first_name'         => $order_detail['customer_first_name'],
				'user_email'         => $order_detail['customer_email'],
				'role'               => 'customer',
			);
			$userid = wp_insert_user( $userdata );
			if ( !is_wp_error( $userid ) ) { 
			    add_user_meta( $userid, 'billing_phone', $order_detail['customer_phone'] );
			    add_user_meta( $userid, 'billing_address_2', $order_detail['customer_address'] );
			}
	   }
   endforeach;
}
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@ligisayan Автор вопроса
Добавление функции
wc_update_new_customer_past_orders( $userid );
помогло мне связать текущего пользователя со всеми предыдущими аккаунтами.
Почерпнул из этой статьи
А вот эта функция позволяет связать текущий заказ с моим пользователем
update_post_meta($order_id, '_customer_user', get_current_user_id());
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Ну, во-первых - брать всех пользователей, проходиться циклом по всему списку и сравнивать имейл чтобы выловить нужного юзера это конечно ад. Есть же get_user_by( 'email', $email ).

А во-вторых, WooCommerce юзеров по-другому регистрирует, и клиента привязывает, и там свои хуки. При чем здесь woocommerce_thankyou?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы