将作者插件从昵称更改为ID

时间:2015-11-16 作者:Laniakea

我更改了默认的注册选项,允许用户使用其电子邮件地址注册。他们还可以选择添加自己的名字和姓氏,但这不是必需的。

// Allow email instead of nickname for login 
add_filter(\'authenticate\', function($user, $email, $password){

    //Check for empty fields
    if(empty($email) || empty ($password)){        
        //create new error object and add errors to it.
        $error = new WP_Error();
        if(empty($email)){ //No email
            $error->add(\'empty_username\', __(\'<strong>Viga</strong>: Unustasid sisestada e-posti aadressi\'));
        }
        else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
            $error->add(\'invalid_username\', __(\'<strong>Viga</strong>: E-posti aadress on vale.\'));
        }
        if(empty($password)){ //No password
            $error->add(\'empty_password\', __(\'<strong>Viga</strong>: Unustasid sisestada parooli\'));
        }
        return $error;
    }

    //Check if user exists in WordPress database
    $user = get_user_by(\'email\', $email);

    //bad email
    if(!$user){
        $error = new WP_Error();
        $error->add(\'invalid\', __(\'<strong>Viga</strong>: E-posti aadress või parool ei ole õige.\'));
        return $error;
    }
    else{ //check password
        if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
            $error = new WP_Error();
            $error->add(\'invalid\', __(\'<strong>Viga</strong>: E-posti aadress või parool ei ole õige.\'));
            return $error;
        }else{
            return $user; //passed
        }
    }
}, 20, 3);
但这带来了一个问题。在“作者”页面上,用户的电子邮件地址变为公共地址:

http://example.com/author/email-address/
我知道如何更改URL的/作者/部分:

add_action(\'init\', \'cng_author_base\');
function cng_author_base() {
    global $wp_rewrite;
    $author_slug = \'autor\'; // change slug name
    $wp_rewrite->author_base = $author_slug;
}
但不是如何更改用户名以显示作者的ID。能做到吗?

2 个回复
SO网友:Crazycoolcam

很惊讶看到这么长时间都没有得到回答。用一个简单的代码块就可以做到这一点:

function set_my_nice_name() {
    global $wpdb;
    $user_table = $wpdb->prefix . \'users\';
    $wpdb->query("UPDATE $user_table SET `user_nicename`=`ID`");
}
add_action(\'init\', \'set_my_nice_name\');
这是因为author slug(或BuddyPress中的profile slug)的可见部分使用user_nicename 列,这只是将数据库中每个人的用户ID复制到该列。

SO网友:amarinediary

需要记住的是,作者的查询可能会变得真正可预测。正在添加+1 这不难吗。可能会出现来自机器人的滥用,例如通过Puppeter检索数据。

我们可以将user_registered 通过消毒。我们将得到一个很好的随机数字串,这将积极防止机器人和用户跳过页面。

我们可以在注册时捕获用户ID,然后更新user_nicename 具有所需的值。

add_action( \'user_register\', \'wpso208792\' );

function wpso208792( $user_id ) {

    $userdata = array (
        \'ID\' => $user_id, 
        \'user_nicename\' => sanitize_title_with_dashes( $user_id . str_replace ( array( \'-\', \' \', \':\', ), \'\', get_userdata( $user_id )->user_registered ) ),
    );

    wp_update_user( $userdata );

};
如果你不想让用户随机化user_nicename 只需删除 . str_replace ( array( \'-\', \' \', \':\', ), \'\', get_userdata( $user_id )->user_registered ) 从值。

相关推荐

如何对不同类别使用相同的POST Slug?

我想对不同的类别使用相同的post slug。因为我将有不同的项目使用相同的slug。我已经有了post slugemail. 第二个弹头email 成为email-2, 但我不想那样。例如,我将有不同的电子邮件项目:www.example.com/category-one/email www.example.com/category-two/email www.example.com/category-three/email