Cómo incluir en la lista blanca dominios de correo electrónico específicos al registrarse

2 minutos de lectura

avatar de usuario
Seacrist

Tenemos un sitio de publicación en WordPress en el que queremos que cualquiera pueda registrarse, pero las personas que se registren con ciertos dominios de correo electrónico tendrán acceso a más contenido. Estamos usando el complemento Paid Memberships Pro WordPress y tratando de descubrir cómo asignarles membresía cuando se registran, pero no sabemos php.

La razón por la que no podemos simplemente crear un nivel de membresía gratuito para que elijan cuando se registran es porque queremos que se registren en nuestro sitio a través del widget de inicio de sesión Auth0 que no les permite elegir niveles de membresía.

Pensamos que una matriz sería útil, algo como:

$domain_name = array("ipqpubs.com", "ipqpubs.org");

if (in_array("ipqpubs.com", $domain_name))

o

if (domain_list($domains))
    $hasaccess = true;

Pero no sabemos si eso funcionaría o hacia dónde ir desde allí. Encontramos algunas cosas útiles en sus archivos como:

function pmpro_hasMembershipLevel( $levels = null, $user_id = null ) {
    global $current_user, $wpdb;

    $return = false;

    if ( empty( $user_id ) ) {
        $user_id = $current_user->ID;
    }

if ( ! empty( $user_id ) && is_numeric( $user_id ) ) { // get membership 
levels for given user
        $membership_levels = pmpro_getMembershipLevelsForUser( $user_id );
    } else {
        $membership_levels = null; // non-users don't have levels
    }

pmpro_getMembershipLevelsForUser( $user_id );
return pmpro_changeMembershipLevel( 0, $user_id, $old_level_status );
}           

Así que pensamos que tal vez uno de esos o algo similar podría usarse para asignarles un nivel de membresía tan pronto como se registren para que no tengan que hacer nada más y puedan ver todo en nuestro sitio.

Gracias de antemano por tu ayuda

Si puede obtener el correo electrónico de los usuarios, puede intentar compararlo con una expresión regular que contenga lo siguiente:

$userEmail = $currentUser->email ?? ""; // Assumed property of $currentUser
if (preg_match('/(@ipqpubs.com|@ipqpubs.org)/', $userEmail)) {
    // User has an email that matches one of the domains!
} else {
    // User does not have an email that matches any of the domains.
}

Si la lista de dominios “aprobados” es larga, puede hacer lo siguiente:

$approvedDomains = ['ipqpubs.com', 'ipqpubs.org'];
$approvedDomainFilter="/(".join('|@', $approvedDomains).')/';

$userEmail = $currentUser->email ?? ""; // Assumed property of $currentUser
if (preg_match($approvedDomainFilter, $userEmail)) {
    // User has an email that matches one of the domains!
} else {
    // User does not have an email that matches any of the domains.
}

No utilice esta solución tal como está. Debe asegurarse de que la variable $userEmail se establezca en el correo electrónico real del usuario y escriba el código que debe ejecutarse si el correo electrónico coincide.

  • OK gracias. Sí, tenemos una matriz con alrededor de 50 dominios diferentes a los que queremos asignar membresía. Realmente no sabemos cómo conectar esa matriz a pmpro_changeMembershipLevel o lo que sea

    – Seacrist

    31 de enero de 2019 a las 20:21

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad