WooCommerce 會員中心再升級:註冊完直接補資料、加一頁「買過的商品」、下載檔名拿掉亂碼

WooCommerce 會員中心再升級:註冊完直接補資料、加一頁「買過的商品」、下載檔名拿掉亂碼

最後更新:2026/10/15

〈WooCommerce「我的帳戶」頁整理〉那篇整理了會員中心的選單和首頁。這篇接著處理三個客人實際會遇到的小地方:

  • 客人在「我的帳戶」頁註冊完,停在一頁控制台,不知道下一步要做什麼。
  • 老客人想再買一次上次的商品,要點進一張一張訂單才找得到。
  • 賣電子書、講義的店家,客人下載到的檔名後面多了一串看不懂的字。

不想自己改?把這篇交給 AI

把這篇的網址(或全文)連同下面這段話貼給 AI:

我的網站是 WordPress,有裝 WooCommerce。我想照下面這篇文章調整「我的帳戶」:註冊後直接到帳戶資料頁、多一頁列出客人買過的商品、下載檔名拿掉後面的亂數。
請先問我:客人是在「我的帳戶」頁註冊還是結帳時順便註冊、我有沒有賣可下載的商品、新頁面想叫什麼名稱。
問清楚之後,再一步一步告訴我:要用哪一段程式碼、貼在哪裡、哪些地方要換成我自己的資料,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)

改之前先備份,密碼不要貼給 AI。

先確認:「我的帳戶」頁可以註冊

到「WooCommerce > 設定 > 帳號及隱私權」,「顧客可建立帳號:」底下勾「「我的帳號」頁面」,客人才能在「我的帳戶」頁自己註冊。只勾「結帳期間」的話,客人只能在結帳時順便建立帳號。

WooCommerce 的註冊表單預設只要填 Email,帳號名稱會自動產生,客人不用另外想一個帳號。網路上教「拿掉帳號欄位、只用 Email 註冊」的文章,大多是給 WordPress 原本的註冊頁用的,WooCommerce 已經是這樣了。帳號名稱怎麼產生,第 31 篇〈WooCommerce「我的帳戶」頁整理〉有說明。

完整程式碼

// 1. 在「我的帳戶」註冊完,直接帶到「帳戶詳細資料」請他補姓名(結帳時順便註冊的不受影響)
add_filter('woocommerce_registration_redirect', function ($redirect) {
    return wc_get_account_endpoint_url('edit-account');
});

// 2. 「我的帳戶」多一頁「買過的商品」:列出付款完成的訂單裡所有商品,點了可以回商品頁
add_action('init', function () {
    add_rewrite_endpoint('purchased', EP_ROOT | EP_PAGES);
});
add_filter('woocommerce_get_query_vars', function ($vars) {
    $vars['purchased'] = 'purchased';
    return $vars;
});
add_filter('woocommerce_account_menu_items', function ($items) {
    $new = [];
    foreach ($items as $key => $label) {
        $new[$key] = $label;
        if ($key === 'orders') {
            $new['purchased'] = '買過的商品';
        }
    }
    return $new;
});
add_action('woocommerce_account_purchased_endpoint', function () {
    $orders = wc_get_orders([
        'customer_id' => get_current_user_id(),
        'status'      => wc_get_is_paid_statuses(),
        'limit'       => -1,
    ]);
    $seen = [];
    foreach ($orders as $order) {
        foreach ($order->get_items() as $item) {
            $product = $item->get_product();
            if ($product && !isset($seen[$product->get_id()])) {
                $seen[$product->get_id()] = $product;
            }
        }
    }
    if (!$seen) {
        echo '<p>目前還沒有買過的商品。</p>';
        return;
    }
    echo '<ul class="mimi-purchased">';
    foreach ($seen as $product) {
        echo '<li><a href="' . esc_url($product->get_permalink()) . '">' . esc_html($product->get_name()) . '</a></li>';
    }
    echo '</ul>';
});

// 3. 客人下載到的檔名,拿掉上傳時自動加在後面的 6 個亂數(book-x8k2pq.pdf → book.pdf)
add_filter('woocommerce_file_download_filename', function ($filename) {
    return preg_replace('/-[a-z0-9]{6}(\.[a-z0-9]+)$/', '$1', $filename);
});

程式碼放在 Code Snippets 這類外掛或子主題,放法見〈WooCommerce 結帳頁改成台灣習慣〉。三段可以只挑需要的貼。貼了第 2 段之後,到「設定 > 永久連結」按一次「儲存設定」,新的頁面網址才會生效,不然點了會是「找不到頁面」。

第 1 段:註冊完,直接請客人補資料

WooCommerce 註冊表單只問 Email,所以新會員的帳號裡沒有姓名。註冊完預設停在控制台,客人多半就去逛了,姓名一直是空的,之後你在後台看到的是一個 Email,不知道是誰。

這段把註冊完的去處改成「帳戶詳細資料」頁,客人一註冊好就看到姓名欄位,順手填一填。我們在測試站從「我的帳戶」頁註冊一個新帳號,按下註冊之後,網址直接變成 /my-account/edit-account/。

結帳時順便建立帳號的客人不受影響,照常看到訂單完成頁,這是我們要的:客人剛付完錢,最想看的是訂單有沒有成功。

第 2 段:會員中心多一頁「買過的商品」

回購的客人,想要的常常就是「上次那一個」。訂單頁要一張一張點進去,訂單一多就找不到了。這段在選單的「訂單」下面加一項「買過的商品」,把客人所有已付款訂單裡的商品整理成一份清單,同一件商品買過很多次只列一次,點名稱就回到商品頁,可以直接再買。

四個小段分別是:建立新頁面的網址 /my-account/purchased/、讓 WooCommerce 認得這個網址、把它加進選單(排在「訂單」後面)、頁面要顯示的內容。「已付款」用的是 WooCommerce 自己的判斷,處理中和已完成的訂單算,還沒付款、已取消的不算。

我們在測試站用一個有兩張訂單的客人帳號登入:選單變成「控制台、訂單、買過的商品、下載次數、地址、帳戶詳細資料、登出」,「買過的商品」頁列出兩件商品,點了都能回到商品頁。選單名稱想改,把 '買過的商品' 換掉就好。(「下載次數」是繁中翻譯對下載頁的叫法,想改成「下載」,見〈functions.php 常用小技巧〉。)

第 3 段:下載的檔名拿掉亂數

〈WooCommerce 賣電子書、講義、素材〉那篇說過,用商品頁的「選擇檔案」上傳的檔案,檔名後面會自動加 6 個隨機字元,例如 photo-book-x8k2pq.pdf,讓別人猜不到網址。這是好事,但客人下載下來,桌面上就是一個後面帶亂碼的檔案。

這段在客人下載的那一刻,把檔名後面的那 6 個字元拿掉。主機上的檔案名稱不變,保護照樣有效,只是客人存下來的檔名變乾淨了。我們在測試站下載同一個檔案:沒加程式碼時,客人拿到的是 mimi-book-x8k2pq.epub;加了之後是 mimi-book.epub。

上傳的檔案名稱建議用英文。檔名是中文的話,有些瀏覽器和主機在下載時處理不好,可能下載失敗或檔名變亂碼。電子書的書名寫在商品名稱和「檔案名稱」欄位(客人在下載清單看到的名字)就好,實際的檔名用英文。

會員中心,是給老客人回來的地方

新客人看的是首頁和商品頁,老客人回來第一個打開的是「我的帳戶」。註冊完知道要補什麼、想回購找得到、下載的檔案乾淨好找,這些小地方,決定老客人下次還會不會回來你的網站買,而不是去別的平台搜尋同一樣東西。

如果你想做一個有會員、能回購、能賣數位商品的網站,可以先看〈IG 帳號不是你的資產〉想想網站要做到什麼。MIMI 專做客製化網頁設計,購物車電商網站、會員網站都能照你的客人規劃。MIMI 提供臺北網頁設計服務,臺北的店家可以用電話、Email 直接和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。

WooCommerce 內建「品牌」怎麼用?改名成製造商、出版社、產地,品牌頁網址一起改
WooCommerce 商店頁四個小調整:轉到自己做的頁面、型錄商品不給點、顯示價格區間、拿掉重複的小計

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

我的車
願望清單
最近瀏覽過的
類別