GET_USER_通过在给定字符串时请求字符串

时间:2016-04-29 作者:Evergetic

我在登录表单中添加了一个额外字段。当尝试获取该字段的用户值时(在检查是否相等之前),我有一个get_user_by(\'login\', $username);. $用户名是电子邮件地址(这是我唯一允许的。)

具体错误是:Warning: trim() expects parameter 1 to be string, object given in /(removed for privacy)/public_html/wp-includes/class-wp-user.php on line 201

完整代码:(单击登录/wp登录后)

add_filter(\'wp_authenticate_user\', \'filter_login_auth\', 10, 3);
function filter_login_auth($username, $password) {
    //get posted value
    $value = $_POST[\'klantnr\'];

    //get user object
    $user = get_user_by(\'login\', $username);

    //get stored klantnr
    $stored = get_user_meta($user->ID, \'klantnr\',  true);

    if(!$user || empty($value) || $value != $stored) {
        //No user, empty, or not correct
        remove_action(\'authenticate\', \'wp_authenticate_username_password\', 20);

        //Create error to return
        $user = new WP_Error(\'denied\', __("<strong>ERROR</strong>: Je klantnummer is niet correct."));
    }

    // return null so if klantnr is correct the script continues.
    return $user;
}

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

如果是您的代码,则使用传递给的第一个参数wp_authenticate_user 筛选器回调。这是一个WP\\u用户对象,它不是电子邮件地址,也不是字符串。

您可能会因为变量的名称而感到困惑,$username, 我建议将名称改为$user, whcih更合适,它更好地表示了该变量的实际值。

add_filter(\'wp_authenticate_user\', \'filter_login_auth\', 10, 3);
function filter_login_auth( $user, $password ) {
    //get posted value
    $value = $_POST[\'klantnr\'];

    //get user object
    $user = get_user_by(\'login\', $user->user_login);

    // .....

}
但你不需要,因为get_user_by() 返回用户对象,并且您已经拥有它:

add_filter(\'wp_authenticate_user\', \'filter_login_auth\', 10, 3);
function filter_login_auth( $user, $password ) {
    //get posted value
    $value = $_POST[\'klantnr\'];

    // You don\'t need this, you already have the user object
    // get user object
    //$user = get_user_by(\'login\', $user->user_login);

    // .....

}
有关更多信息,请参阅wp_authenticate_user docs.

相关推荐

如何从USERS-edit.php中删除颜色选择器代码

我知道我不应该改变Wordpress的核心。但如果我想在“用户编辑”中使用仪表板用户配置文件页面。php和删除大块代码(如颜色选择器)的方法。从第259行到第336行-我想全部删除。<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> <tr class="user-rich-editing-wrap"> <th scope="