使用Ultimate Member Plugin进行电子邮件验证

时间:2017-08-01 19:48:31

标签: php wordpress validation email

我需要帮助修改下面的代码。我在Wordpress网站上使用Ultimate Member插件获得会员资格。我只希望组织内的那些人能够注册该网站(我的部门使用不同的域名作为他们的电子邮件地址,这是一个令人头痛的问题,我不想进入该网站)。现在,它将自动验证来自@ company1.com的电子邮件,但我需要为该代码添加多达10个电子邮件地址以执行自动验证。基本上,任何没有列出电子邮件地址的人都会自动被拒绝访问该网站。

add_action('um_before_new_user_register', 'require_google_email_for_signup');
function require_google_email_for_signup( $args ) {
    extract($args);
    if ( !strstr( $user_email, '@company1.com' ) )
        exit( wp_redirect( add_query_arg('err', 'you_must_have_googlemail') ) );
}

4 个答案:

答案 0 :(得分:0)

使用此代码:

<?php
add_action('um_before_new_user_register', 'require_google_email_for_signup');
function require_google_email_for_signup( $args ) {
    extract($args);

    /* add multiple domains name here */
    $allow_domains = ['company1.com', 'company2.com', 'company3.com'];

    /* get domain name from user email */
    $domain_name = substr(strrchr($user_email, "@"), 1);

    if (!in_array($domain_name, $allow_domains)){
        exit( wp_redirect( add_query_arg('err', 'you_must_have_googlemail') ) );
    }
}
?>

答案 1 :(得分:0)

strstr() is more memory intensive compared to strpos(),所以我建议使用后者。处理数组时,可以使用以下迭代逻辑:

  1. 将变量(例如$check)设置为false
  2. 在for循环中迭代每个允许的域
  3. 每当找到匹配项时(使用strpos()),我们会将$check设置为true并跳出循环。这确保了在找到匹配项时我们不会遍历整个数组
  4. 评估$check,并决定是否抛出错误/退出
  5. 提示:我建议您在使用strpos时将用户电子邮件转换为小写(或者您可以使用stripos()),因为某些用户可能会输入混合大小写的电子邮件。

    考虑到这一点,这是一个例子:

    <?php
    add_action('um_before_new_user_register', 'require_google_email_for_signup');
    function require_google_email_for_signup( $args ) {
    
        extract($args);
    
        // Store allowed domains in an array
        $allowed_domains = ['@company1.com', '@company2.com', '@company3.com'];
    
        // Set flag to false (fail-safe)
        $check = false;
    
        // Iterate through all allowed domains
        foreach( $allowed_domains as $domain ) {
    
            // If a match is found (remember to use lowercase emails!)
            // Update flag and break out of for loop
            if ( strpos( strtolower( $user_email ), $domain ) !== false ) {
                $check = true;
                break;
            }
        }
    
        if ( !$check )
            exit( wp_redirect( add_query_arg('err', 'you_must_have_googlemail') ) );
    }
    

答案 2 :(得分:0)

此自定义代码不再适用于最终成员的最新版本2更新。钩子已被删除,因此不再可能使用此代码阻止电子邮件地址阻止。有没有人对如何让它再次发挥作用有任何建议?这是我正在使用的代码:

/* ULTIMATE MEMBER PLUGIN DOMAIN WHITELISTING CODE SNIPPET
enter code here`The following code will require a domain name to be  
whitelisted for user `enter code here`registrations.     
It forces a user email to match one included in this code at registration.
You can add any provider you want by copying and pasting a new line as per 
instructions.*/

add_action('um_before_new_user_register', 'force_google_email_for_avnw_signup');
    function force_google_email_for_avnw_signup( $args ) {
       extract($args);
       if ( !strstr( $user_email, '@anydomain.com' ) )

          exit( wp_redirect( add_query_arg('err', 'whitelisted_email_required') ) );
    }

答案 3 :(得分:0)

“ um_before_new_user_register”已从2.x版本中删除。您可以将以下工作代码用于完整的表单验证,而不仅仅是单个字段。

add_action('um_submit_form_errors_hook_','um_custom_validate_form', 999, 1);
function um_custom_validate_form( $args ) {
    global $ultimatemember;

    $user_email = $args['user_email'];

    if ( !strstr( $user_email, '@domain1.com' )){
        $ultimatemember->classes['form']->add_error( 'user_email', 'You must register with a valid email address.' );
    }
}