Permitir que os usuários se registrem em multisite através do WooCommerce usando o mesmo endereço de e-mail

Estou trabalhando na criação de um ambiente multisitio e tenho a possibilidade de um usuário tentar se registrar no sub-site com o mesmo endereço de e-mail que eles usaram no site principal. Encontrei algum código aqui que remove o erro de endereço de e-mail duplicado e executa essa tarefa.

Aqui está o código relevante a partir da resposta vinculada acima:

add_filter('wpmu_validate_user_signup', 'skip_email_exist'); function skip_email_exist($result){ if(isset($result['errors']->errors['user_email']) && ($key = array_search(__('Sorry, that email address is already used!'), $result['errors']->errors['user_email'])) !== false) { unset($result['errors']->errors['user_email'][$key]); if (empty($result['errors']->errors['user_email'])) unset($result['errors']->errors['user_email']); } define( 'WP_IMPORTING', 'SKIP_EMAIL_EXIST' ); return $result; } 

A diferença no meu caso é que estamos apenas permitindo que os usuários se registrem através de uma compra do WooCommerce no sub-site e, evidentemente, o WooCommerce não usa os mesmos ganchos para validar o endereço de e-mail.

Existe uma ação na qual eu possa me conectar para que eu possa executar a mesma funcionalidade através do WooCommerce?

Solutions Collecting From Web of "Permitir que os usuários se registrem em multisite através do WooCommerce usando o mesmo endereço de e-mail"

Existe a opção de não permitir que o usuário se registre no site principal, permitindo que eles se inscrevam apenas no subsite. O plugin network-subsite-user-registration permite isso, se o usuário já estiver registrado na rede, eles serão automaticamente adicionados, pelo plugin, ao site solicitando o registro. O gancho que faz isso é ‘wpmu_validate_user_signup’ ..

 // check and add users if already on the network add_filter( 'wpmu_validate_user_signup', 'add_exting_user' ); /** * If users are already registered with the Network then simply add them * to this new site. * * @return $result or drops out */ function add_exting_user( $result ) { if ( is_user_logged_in() ) { return $result; } $submitted_user_email = $result['user_email']; $original_error = $result['errors']; foreach( $original_error->get_error_codes() as $code ){ foreach( $original_error->get_error_messages( $code ) as $message ){ if( $code != 'user_email' && $message == __( 'Sorry, that username already exists!') ){ $user = get_user_by( 'email', $submitted_user_email ); $user_id = $user->ID; $blog_id = get_current_blog_id(); add_user_to_blog( $blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); $user_blogs = get_blogs_of_user( $user_id ); $user_blogs_sorted = array(); foreach ( $user_blogs AS $user_blog ) { $user_blogs_sorted[ $user_blog->blogname ] = $user_blog->siteurl; } // A real quick way to do a case-insensitive sort of an array keyed by strings: uksort($user_blogs_sorted , "strnatcasecmp"); $html = "

"; $html .= sprintf( __('Hi %1$s you have been added to this site, your current sites on the Network are:', 'network-subsite-user-registration' ), "$submitted_user_email" ); $html .= "

    "; foreach ( $user_blogs_sorted AS $sitename => $siteurl ) { if ( ! is_main_site( $user_blog->userblog_id ) ) { $html .= '
  • ' . $sitename . '

  • '; } } $html .= "
"; die( $html ); } } } return $result; }