我需要帮助修改下面的代码。我在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') ) );
}
答案 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()
,所以我建议使用后者。处理数组时,可以使用以下迭代逻辑:
$check
)设置为false
strpos()
),我们会将$check
设置为true
并跳出循环。这确保了在找到匹配项时我们不会遍历整个数组$check
,并决定是否抛出错误/退出提示:我建议您在使用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.' );
}
}