bbpress 的 profile 链接默认显示用户名,可以修改为显示用户 ID 吗

bbpress 的 profile 链接默认显示用户名,可以修改为显示用户 ID 吗

  • 该话题包含 6 个回复,3 人参与,最后由诗语 更新于 7 年前
正在查看 7 个帖子:1-7 (共 7 个帖子)
  • 作者
    帖子
  • 虫洞
    • 文章数量: 43
    @jixin
    楼主

    我现在的网站使用 Ultimate Member 让用户注册,因为用户名只能是英文,所以在注册的时候,我没有让用户填写用户名,而是换成了昵称和邮件。

    这样注册完成后,用户名默认和邮件相同,所以在其它用户浏览某用户的论坛 profile 时,链接显示的是一个邮件地址,但是会扭曲,比如/users/7397399qq-com,就这样,一看也能知道该用户的邮箱。

    坏处是:

    1. 暴露了用户的邮箱地址

    2. 论坛显示的是昵称,别人 @他的话,会很自然的 @他的昵称,但是这样不起作用,只能 @他的用户名才可以,比如,他的昵称是:呵呵,@呵呵不管用,只有 @7397399qq-c0m 才起作用。

    基于以上两点弊端,我想出来一个办法,通过网上的办法,我实现了让用户名支持中文,这样注册完成之后,用户名和昵称就是相同的,这样在论坛,大家就可以很方便的 @了。 profile 页面去掉了让用户修改昵称的窗口,不要让用户修改昵称,避免修改后无法影响 @体验。

    但是这样又出现了一个问题,因为 bbpress 的 profile 链接里面,又多出了中文,比如:/user/呵呵

    问题又来了,我使用了 WP User Avatar 插件来实现用户更改自定义头像的功能,在点击上传图片后,用户 「呵呵」 的 profile 就进不去了。英文用户名不会有问题。这估计是中文 url 引起的错误。

    后来我想,如果把 profile 里面的用户名,改成用户 ID,应该就解决这个问题了。

    找了好久,不知道如何把用户名修改为用户 ID,所以请大神们看看这个如何修改。

    谢谢各位!

    虫洞
    • 文章数量: 43
    @jixin
    楼主

    在论坛中,直接点击某个楼回复,如果不开启嵌套回复,根本看不出来是回复的谁。

    但是如果开启嵌套回复的话,在手机上的效果很差,最不能容忍的是,嵌套回复不分页。

    所以还是改回了不嵌套。

    很纠结。

    风间
    参与者
    • 文章数量: 670
    @fengjian

    第一个问题,其实被你给弄复杂了,不知道你现在网站的结构是怎样的 已经安装了 Ultimate Member 的话,那么可以直接用重定向到 Ultimate Member 的资料页,

    再一个就是论坛 profile 这个其实还是因为你注册表单没有设计好,让用户直接填入一个数字或者拼音的字符就可以了,改成汉字的话问题会很多,因为 WordPress 原生的很多东西都是基于英文字符和字段的。

    你要改成数字 ID 的用户名,方案是找到了,但没测试:

    https://bbpress.org/forums/topic/user-profile-url-uses-the-username-can-that-be-changed/

    风间
    参与者
    • 文章数量: 670
    @fengjian

    第二个问题的话,因为 bbPress 原生的就比较简单,如果是要点加载效果的话,上传好像说过:

    可以试试这个

    bbPress Direct Quotes 自动为每次引用的帖子添加链接:

    https://wenpai.org/plugins/bbpress-direct-quotes/

    虫洞
    • 文章数量: 43
    @jixin
    楼主

    改成数字 ID 的那个帖子,我试过上面给的代码了,管用,他的问题和我的一样,不想暴露用户的 email 。

    bbPress Direct Quotes 这个插件试了一下,不起作用,估计是年久失修了。

    虫洞
    • 文章数量: 43
    @jixin
    楼主

    https://bbpress.org/forums/topic/user-profile-url-uses-the-username-can-that-be-changed/

    这个链接里面给出的函数很有用。

    他给出的函数本身是用来把 username 改为 displayname,意外的是,还有另外一个收获,就是不用 @username 了,只需要 @displayname,对方就会收到邮件提醒了。不过,有个坏处,就是 displayname 可以有重名,重名的用户,都会收到邮件。

    我稍微把作者的函数修改了一下,修改为显示用户的 ID 号,这样,就可以通过 @用户 ID 来通知对方有回复了。

    这是修改后的代码:

    add_action( 'init', 'nicenames_to_display_name' );
    function nicenames_to_display_name() {
    foreach ( get_users() as $user ) {
    if ( $user->data->user_status == 0 && $user->data->user_nicename != $user->data->display_name ) {
    $user_ids[] = $user->ID;
    }
    }
    foreach( $user_ids as $uid ) {
    $info = get_userdata( $uid );
    $display_name = $info->data->display_name;
    if ($display_name) {
    $args = array(
    'ID' => $uid,
    'user_nicename' => strtolower(str_replace(" ", "_", $uid))
    );
    wp_update_user( $args );
    }
    }
    }
    诗语
    管理员
    • 文章数量: 5,908
    @feibisi

    挺好的,又多了一种解决方案,感谢分享。

正在查看 7 个帖子:1-7 (共 7 个帖子)
  • 哎呀,回复话题必需登录。

话题信息