Ограничить регистрацию доменов в WooCommerce

Как ограничить доступ к определенным доменам при регистрации WooCommerce для электронной почты пользователя?

Я нашел этот фрагмент кода, который может это сделать, но по какой-то причине он не работает в форме регистрации WooCommerce.

Это работает, если я захожу на страницу входа в WP.

Любая помощь приветствуется.

function is_valid_email_domain($login, $email, $errors ){

    $valid_email_domains = array("gmail.com", "yahoo.com");// allowed domains
    $valid = false; // sets default validation to false
    foreach( $valid_email_domains as $d ){
        $d_length = strlen( $d );
        $current_email_domain = strtolower( substr( $email, -($d_length), $d_length));
        if( $current_email_domain == strtolower($d) ){
            $valid = true;
            break;
        }
    }
 // Return error message for invalid domains
    if( $valid === false ){
        $errors->add('domain_whitelist_error',__( '<strong>ERROR</strong>: Registration is only allowed from selected approved domains. If you think you are seeing this in error, please contact the system administrator.' ));
    }
}

add_action('register_post', 'is_valid_email_domain',10,3 ); //this works
// add_action('woocommerce_register_form', 'is_valid_email_domain',10,0); //getting errors
// add_action('user_register', 'is_valid_email_domain',10,3 ); //getting errors

2 ответа

Решение

Правильный хук для использования в WooCommerce: woocommerce_register_post действие крюк. Попробуйте это вместо этого:

add_action('woocommerce_register_post','is_valid_registration_email_domain', 10, 3 );
function is_valid_registration_email_domain( $username, $email, $validation_errors ){
    $valid_email_domains = array( 'gmail.com', 'yahoo.com' ); // Allowed domains
    $valid = false; // sets default validation to false
    foreach( $valid_email_domains as $d ){
        $d_length = strlen( $d );
        $current_email_domain = strtolower( substr( $email, -($d_length), $d_length));
        if( $current_email_domain == strtolower($d) ){
            $valid = true;
            break;
        }
    }

    // Return error message for invalid domains
    if( ! $valid ){
        $error_text = __( "<strong>ERROR</strong>: Registration is only allowed from selected approved domains. If you think you are seeing this in error, please contact the system administrator.", "woocommerce" );
        $validation_errors->add( 'domain_whitelist_error', $error_text );
    }
}

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

Проверено и работает.

Вместо этого это ограничение доменов (blakclist):

      add_action('woocommerce_register_post','is_invalid_registration_email_domain', 10, 3 );

function is_invalid_registration_email_domain( $username, $email, $validation_errors ) {
    $invalid_email_domains = array( 'domain1', 'domain2', 'domain3' ); // Restricted domains
    $invalid = false; // sets default validation to false


foreach( $invalid_email_domains as $d ) {
    $d_length = strlen( $d );
    $current_email_domain = strtolower( substr( $email, -($d_length), $d_length));
    if( $current_email_domain == strtolower($d) ) {
        $invalid = true;
        break;
    }
}

// Return error message for invalid domains
if( $invalid ){
    $error_text = __( "<strong>ERROR</strong>: Registration from this email domain is restricted.", "woocommerce" );
    $validation_errors->add( 'domain_blacklist_error', $error_text );
}

}

Другие вопросы по тегам