У нас есть сайт публикации на WordPress, на который мы хотим, чтобы любой мог подписаться, но люди, которые зарегистрируются на определенных доменах электронной почты, будут иметь доступ к большему количеству контента. Мы используем плагин WordPress Proid Memberships Pro и пытаемся выяснить, как назначить им членство при регистрации, но мы не знаем php.
Причина, по которой мы не можем просто сделать бесплатный уровень членства, чтобы они могли выбирать при регистрации, заключается в том, что мы хотим, чтобы они регистрировались на нашем сайте через виджет входа в систему Auth0, который не позволяет им выбирать уровни членства.
Мы думали, что массив будет полезен, что-то вроде:
$domain_name = array("ipqpubs.com", "ipqpubs.org");
if (in_array("ipqpubs.com", $domain_name))
или же
if (domain_list($domains))
$hasaccess = true;
Но мы не знаем, сработает ли это или куда идти дальше. Мы нашли некоторые полезные вещи в их файлах, такие как:
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 );
}
Поэтому мы подумали, что, возможно, один из них или что-то подобное можно использовать, чтобы назначить им уровень членства, как только они зарегистрируются, чтобы им больше ничего не нужно было делать и они могли видеть все на нашем сайте.
Заранее спасибо за помощь
Если вы можете получить электронную почту пользователей, вы можете попытаться сопоставить ее с регулярным выражением, содержащим следующее:
$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.
}
Если список «одобренных» доменов становится длинным, вы можете сделать следующее:
$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.
}
Не используйте это решение как есть. Вы должны убедиться, что переменная $ userEmail установлена на фактическую электронную почту пользователя, и написать код, который должен быть выполнен, если электронная почта совпадает.
Других решений пока нет …