使用登录表单上的额外字段值在登录时重定向用户

时间:2017-07-21 作者:rhinorck

我已经用login\\u form操作挂钩在我的登录表单中添加了一个字段,如下所示

add_action(\'login_form\',\'select_contest_field\');
function select_contest_field(){
//Output your HTML
?>
<p class="tml-user-pass-wrap">
  <label for="contest">Select Contest</label>
  <select class="form-control input-lg" id="contest" name="contest" required>
    <option value="uppa"  >UPPA 2017</option>
    <option value="ypa">Young Photographer Award</option>
  </select>
</p>
<?php
}
我有一个login\\u重定向过滤器,可以根据特定条件和用户选择的选项重定向用户的登录。

function my_login_redirect( $redirect_to, $request, $user ) {
//set variables
global $wpdb;   
$contests_table = $wpdb->prefix.\'photocontests\';
$user_meta_table        = $wpdb->prefix.\'usermeta\';
$site_url   =   get_site_url();
$my_info_url = $site_url.\'/my-information/\';

if (isset($_POST[\'contest\']) && $_POST[\'contest\'] = "ypa"){
    $contest_page = $site_url.\'/young-photographers-award-2017/young-photographers-award-2017-upload-submit/\';
}
if (isset($_POST[\'contest\']) && $_POST[\'contest\'] = "uppa") {
    $contest_page = $site_url.\'/uganda-press-photo-award-2017/uganda-press-photo-award-2017-upload-submit/\';
} 

global $current_user; 
get_currentuserinfo(); 
$userID =   $user->ID;
$user_info_updated = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM $user_meta_table WHERE user_id = %d AND meta_key = \'userinfo_updated\' ", $userID) );
//check if user has updated information
//is there a user to check?
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
    //check for admins
    if ( in_array( \'administrator\', $user->roles ) ) {
        // redirect them to the default place
        return $redirect_to;
    } else {
        if ($user_info_updated != 1){
        return $my_info_url;
        } else {
        return $contest_page;
        }
    }
} else {
    return $my_info_url;
}
}

add_filter( \'login_redirect\', \'my_login_redirect\', 10, 3 );
当用户登录并在登录表单上选择一个选项时,无论选择了什么选项,在这种情况下,他们都会被重定向到$contest\\u page second选项,

if (isset($_POST[\'contest\']) && $_POST[\'contest\'] = "uppa") {
$contest_page = $site_url.\'/uganda-press-photo-award-2017/uganda-press-photo-award-2017-upload-submit/\';
}

如何确保为$contest\\u页面选择了正确的值?登录表单是否正确地将所选选项传递给函数?基本上,有人帮帮我!

1 个回复
最合适的回答,由SO网友:dbeja 整理而成

问题是IF逻辑中有一个错误,它应该有两个==而不是一个。事实上,第一个IF是将ypa值赋给$\\u POST[“竞赛”],而不是比较。

IFs块应为:

if (isset($_POST[\'contest\']) &&  "ypa" == $_POST[\'contest\']){
    $contest_page = $site_url.\'/young-photographers-award-2017/young-photographers-award-2017-upload-submit/\';
}
if (isset($_POST[\'contest\']) &&  "uppa" == $_POST[\'contest\']) {
    $contest_page = $site_url.\'/uganda-press-photo-award-2017/uganda-press-photo-award-2017-upload-submit/\';
}
我还颠倒了参数的顺序,因为程序员经常会犯这种错误,如果只写一个=错误,就会出现语法错误,无法编译:Yoga conditions

结束

相关推荐

无法访问多站点WordPress的仪表板。Chrome导致“ERR_TOO_MANY_REDIRECTS”

我为这个问题苦恼了两天。这是我的环境:我在Ubuntu 16.04中使用亚马逊EC2,我已经安装了LAMP、phpmyadmin、vsftpd等等。然后我配置了一个clean Wordpress 安装和一切都与我的主要网站工作良好。但是,当我在Chrome中设置多站点时,每当我尝试访问主站点旁边的任何子站点的仪表板时,都会导致“ERR\\u TOO\\u MANY\\u重定向”。在其他浏览器中,我也遇到了类似的问题。这不是与浏览器相关的问题。当我尝试访问子网站主页时,所有资源,如脚本和样式。css,结果为