-
作者帖子
-
我现在的网站使用 Ultimate Member 让用户注册,因为用户名只能是英文,所以在注册的时候,我没有让用户填写用户名,而是换成了昵称和邮件。
这样注册完成后,用户名默认和邮件相同,所以在其它用户浏览某用户的论坛 profile 时,链接显示的是一个邮件地址,但是会扭曲,比如/users/7397399qq-com,就这样,一看也能知道该用户的邮箱。
坏处是:
1. 暴露了用户的邮箱地址
2. 论坛显示的是昵称,别人 @他的话,会很自然的 @他的昵称,但是这样不起作用,只能 @他的用户名才可以,比如,他的昵称是:呵呵,@呵呵不管用,只有 @7397399qq-c0m 才起作用。
基于以上两点弊端,我想出来一个办法,通过网上的办法,我实现了让用户名支持中文,这样注册完成之后,用户名和昵称就是相同的,这样在论坛,大家就可以很方便的 @了。 profile 页面去掉了让用户修改昵称的窗口,不要让用户修改昵称,避免修改后无法影响 @体验。
但是这样又出现了一个问题,因为 bbpress 的 profile 链接里面,又多出了中文,比如:/user/呵呵
问题又来了,我使用了 WP User Avatar 插件来实现用户更改自定义头像的功能,在点击上传图片后,用户 「呵呵」 的 profile 就进不去了。英文用户名不会有问题。这估计是中文 url 引起的错误。
后来我想,如果把 profile 里面的用户名,改成用户 ID,应该就解决这个问题了。
找了好久,不知道如何把用户名修改为用户 ID,所以请大神们看看这个如何修改。
谢谢各位!
在论坛中,直接点击某个楼回复,如果不开启嵌套回复,根本看不出来是回复的谁。
但是如果开启嵌套回复的话,在手机上的效果很差,最不能容忍的是,嵌套回复不分页。
所以还是改回了不嵌套。
很纠结。
第一个问题,其实被你给弄复杂了,不知道你现在网站的结构是怎样的 已经安装了 Ultimate Member 的话,那么可以直接用重定向到 Ultimate Member 的资料页,
再一个就是论坛 profile 这个其实还是因为你注册表单没有设计好,让用户直接填入一个数字或者拼音的字符就可以了,改成汉字的话问题会很多,因为 WordPress 原生的很多东西都是基于英文字符和字段的。
你要改成数字 ID 的用户名,方案是找到了,但没测试:
https://bbpress.org/forums/topic/user-profile-url-uses-the-username-can-that-be-changed/
第二个问题的话,因为 bbPress 原生的就比较简单,如果是要点加载效果的话,上传好像说过:
可以试试这个
bbPress Direct Quotes 自动为每次引用的帖子添加链接:
改成数字 ID 的那个帖子,我试过上面给的代码了,管用,他的问题和我的一样,不想暴露用户的 email 。
bbPress Direct Quotes 这个插件试了一下,不起作用,估计是年久失修了。
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 ); } } }
挺好的,又多了一种解决方案,感谢分享。
-
作者帖子
- 哎呀,回复话题必需登录。