WordPress: BuddyPress: разрешить регистрацию только одного почтового домена - PullRequest
0 голосов
/ 07 апреля 2020

В BuddyPress я хочу разрешить регистрироваться и входить в систему, используя только один почтовый домен. Например, xxx@myemaildomain.com восстановить все будет запрещено.

Я проверил в источнике BuddyPress и обнаружил, что BuddyPress использует bp_core_validate_user_signup( $user_name, $user_email ) для регистрации с фильтром

return apply_filters( 'bp_core_validate_user_signup', $result );

Поэтому я попытался использовать фильтр для изменения поля user_email, как показано в коде ниже. Но это не работает.

function wf_validate_email_domain($result)
{

    $email = $result[ 'user_email' ];

    // make sure we've got a valid email
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        // split on @ and return last value of array (the domain)
        $domain = array_pop(explode('@', $email));

        if ($domain != 'mydomain.com') {
            $result[ 'user_email' ] = '';
        }
    }

    return $result;

}

add_filter('bp_core_validate_user_signup', 'wf_validate_email_domain', 9999);

Вопрос:

Как я могу проверить электронную почту, чтобы она позволяла регистрироваться и входить в систему только с одного указанного c почтовый домен?

1 Ответ

1 голос
/ 07 апреля 2020

$result должно содержать поле errors, в соответствии с документацией: https://www.buddyboss.com/resources/reference/functions/bp_core_validate_user_signup/

Следовательно, вместо установки почтового адреса на адрес электронной почты следует добавить ошибку. пустая строка, например, так:

function wf_validate_email_domain($result)
{
    $allowed_domain = 'apolloblake.com';
    $email = $result[ 'user_email' ];

    // make sure we've got a valid email
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        // split on @ and return last value of array (the domain)
        $domain = array_pop(explode('@', $email));

        if ($domain != $allowed_domain) {
            $result[ 'errors' ]->add( 'user_email', 
            "You may only register with mail addresses on @${allowed_domain}." );
        }
    }

    return $result;

}

Возможно, вам придется сделать это сообщение многоязычным, но это зависит от вашей настройки WP.

...