bbpress 的 profile 連結預設顯示使用者名稱,可以修改為顯示使用者 ID 嗎

正在檢視 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,935
    @feibisi

    挺好的,又多了一種解決方案,感謝分享。

正在檢視 7 個帖子:1-7 (共 7 個帖子)
  • 哎呀,回覆話題必需登入。

話題資訊