这只是一个备选答案,而不是问题的预期答案。我正在从他们注册的注册表中查找哪个用户是教师还是学生。据我所知,可以通过检查user\\u meta表中的表单元键关系来完成。这是一种查找哪些数据存储给教师,哪些数据存储给学生的方法。利用这个,我们找到了老师和学生。在我的问题中,我使用user\\u register hook中的函数在用户注册后立即获取用户的userid。但这有一个问题。
并非所有元数据都可以使用此函数中的user\\u meta表访问。这是我从stackoverflow的问题中得到的How to get user_meta value for new user regsitered?
我建议的另一种解决方案是在用户首次登录时为其添加折扣。这样做是为了完全访问user\\u元数据,并找到哪个用户是教师,哪个用户是学生。以下是代码:
add_action( \'user_register\', \'function_new_user\');
function function_new_user($user_id) {
add_user_meta( $user_id, \'_new_user\', \'1\' );
}
add_action(\'wp_login\', \'function_check_login_redirect\', 10, 2);
function function_check_login_redirect($user_login, $user) {
$logincontrol = get_user_meta($user->ID, \'_new_user\', \'TRUE\');
if ( $logincontrol )
{
$user_id = $user->ID;
update_user_meta( $user->ID, \'_new_user\', \'0\' );
global $wpdb;
$count_query ="SELECT * FROM discount_for_users WHERE userid=\'$user_id\'";
$results = $wpdb->get_results ( "SELECT * FROM discount_for_users WHERE userid=\'$user_id\'" );
$numrows = $wpdb->get_var($count_query);
if( $user->has_cap( \'administrator\') or $user->has_cap( \'author\'))
{
$discountMonths = 0;
$discountValue = 0;
$disctype =\'admin\';
}
elseif( metadata_exists( \'user\', $user_id, \'studentmothermobile\' ))
{
$disctype = \'student\';
$stdDiscount = $wpdb->get_results ( "SELECT * FROM student_discount WHERE status=\'active\' LIMIT 1" );
foreach ( $stdDiscount as $print )
{
$val=1;
$discountMonths =$print->months;
$discountValue =$print->discount;
}
}
elseif ( metadata_exists( \'user\', $user_id, \'teachdobmeta\' ) )
{
$disctype = \'teacher\';
$tearesult = $wpdb->get_results ( "SELECT * FROM teacher_discount WHERE status=\'active\' LIMIT 1" );
foreach ( $tearesult as $teachprint )
{
$val=1;
$discountMonths =$teachprint->months;
$discountValue =$teachprint->discount;
}
}
else
{
$discountMonths = 0;
$discountValue = 0;
$disctype =\'user\';
}
$table = \'discount_for_users\';
$data = array(
\'userid\' => $user_id,
\'discount\' => $discountValue,
\'vaildity\' => $discountMonths,
\'type\' => $disctype,
);
$format = array(
\'%d\',
\'%d\',
\'%d\',
\'%s\',
);
$success=$wpdb->insert( $table, $data, $format );
}
}
在解决方案中,我们在注册时为用户元数据添加值1,并在第一次登录时将其更新为0。存在检查元数据值是否为1并运行函数的条件。因此,它只会第一次运行该函数,我们可以使用此方法根据类型添加与教师和学生相关的折扣。请注意,这是替代解决方案,如果有直接解决方案可以解决此问题,请提供。这将很有帮助。我们的首要任务是在注册时增加折扣,而不是在首次登录时。