бесплатное членство при регистрации по домену - PullRequest
0 голосов
/ 24 февраля 2019

На нашем сайте это так, что наши сообщения видны только платным подписчикам.Но мы хотим, чтобы пользователи с определенными доменами адресов электронной почты, при регистрации, могли просматривать все имеющиеся у нас сообщения, не оплачивая их.Мы используем платный плагин для членства в WordPress Pro, и в документации они содержат биты кода, которые позволяют нам автоматически назначать членство при регистрации и ограничивать регистрацию для определенных доменов.Они оба работают как задумано, но когда мы попробовали объединить их, это не сработало.На самом деле мы не знаем php, поэтому мы просто перемещаем строки туда, где, по нашему мнению, имеет смысл.Третий фрагмент кода - наша попытка объединить их.У кого-нибудь есть предложения по их соединению?

/* When registering, add the member to a specific membership level 
 * @param integer $user_id*/
//Disables the pmpro redirect to levels page when user tries to register
add_filter("pmpro_login_redirect", "__return_false");
function my_pmpro_default_registration_level($user_id) {
//Give all members who register membership level 1
pmpro_changeMembershipLevel(1, $user_id);
}
add_action('user_register', 'my_pmpro_default_registration_level');





function restrict_email($value)
{
    $email = $_REQUEST['bemail'];

    if(!check_validity($email))
    {
        global $pmpro_msg, $pmpro_msgt;
        $pmpro_msg = "Please enter a valid email address";
        $pmpro_msgt = "pmpro_error";
        $value = false;
    }
    return value;
}
add_filter('pmpro_registration_checks','restrict_email', 10, 1);
//Taken from: http://www.bitrepository.com/how-to-extract-domain-name-from- 
an-e-mail-address-string.html
function getDomainFromEmail($email)
{
// Get the data after the @ sign
    $domain = substr(strrchr($email, "@"), 1);

    return $domain;
}
function check_validity($email)
{
    $domain = getDomainFromEmail($email);

    $valid_domains = array("yahoo.com", "*.gmail.com", "*.domain.uk");
    foreach($valid_domains as $valid_domain)
    {
        $components = explode(".", $valid_domain);
        $domain_to_check = explode(".", $domain);

        if($components[0] == "*" && sizeof($domain_to_check > 2))
        {
            if($components[1] == $domain_to_check[1] && $components[2] == $domain_to_check[2])
            {
                return true;
            }
        }
        else
        {
            if(!(strpos($valid_domain, $domain) === false))
                return true;
        }
    }
    return false;
}





add_filter("pmpro_login_redirect", "__return_false");
function restrict_email($value)
{   $email = $_REQUEST['bemail'];

    if(!check_validity($email))
    {   global $pmpro_msg, $pmpro_msgt;
        $pmpro_msg = "Please enter a valid email address";
        $pmpro_msgt = "pmpro_error";
        $value = false;
    }
    return value;
}
add_filter('pmpro_registration_checks','restrict_email', 10, 1);
function getDomainFromEmail($email)
{    // Get the data after the @ sign
    $domain = substr(strrchr($email, "@"), 1);
    return $domain;
}
function my_pmpro_default_registration_level($user_id) {
function check_validity($email)
{   $domain = getDomainFromEmail($email);

    $valid_domains = array("ipqpubs.com", "ipqpubs.org");
    foreach($valid_domains as $valid_domain)
    {   $components = explode(".", $valid_domain);
        $domain_to_check = explode(".", $domain);

        if($components[0] == "*" && sizeof($domain_to_check > 2))
        {   if($components[1] == $domain_to_check[1] && $components[2] == $domain_to_check[2])
            {
                pmpro_changeMembershipLevel(1, $user_id);
            }}
        else
        {
            if(!(strpos($valid_domain, $domain) === false))
                return true;
        }}

    return true;
}
add_action('user_register', 'my_pmpro_default_registration_level');
}

1 Ответ

0 голосов
/ 24 февраля 2019

Если вы хотите запустить pmpro_changeMembershipLevel (1, $ user_id), когда доменом является ipqbubs.com или .org, у вас есть несколько проблем здесь.Например, вы захотите поместить эту функцию в строку strpos.Как таковая, эта функция никогда не запустится, потому что ничто в вашем массиве valid_domains не содержит «*» (представляет поддомен).Во-вторых, $ user_id не находится в области действия для check_validity.Пожалуйста, попробуйте что-то вроде этого:

function my_pmpro_default_registration_level($email, $user_id) {
    $domain = getDomainFromEmail($email);
    $valid_domains = array("ipqpubs.com", "ipqpubs.org");
    foreach($valid_domains as $valid_domain) {
       if(strpos($valid_domain, $domain) !== false)
       {
          pmpro_changeMembershipLevel(1, $user_id);
          return true;
        }
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...