WordPress 會員限定內容:一段文字只給會員看、整個會員專區要登入

WordPress 會員限定內容:一段文字只給會員看、整個會員專區要登入

最後更新:2026/10/13

上完課想把講義放在網站上給學員下載,又不想讓所有人都拿得到;買過課程的人可以看補充影片,路過的訪客只看到介紹。這是很多台灣講師、創作者經營網站一陣子之後,自然會想做的事。

聽到「會員」,很多人第一個想到的是裝一套大型會員外掛,結果設定一大堆,用到的只有一小部分。如果你的需求只是「登入才看得到」,WordPress 本身就有使用者和登入功能,加兩段程式碼就夠了。

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

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

我的網站是 WordPress。我想照下面這篇文章,讓文章裡的某些內容只給登入的會員看,並做一個要登入才能進的會員專區。
請先問我:會員分哪幾種、會員怎麼註冊、需不需要收費。
問清楚之後,再一步一步告訴我:要用哪一段程式碼、貼在哪裡、哪些地方要換成我自己的資料,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)

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

先想清楚:你要的是哪一種會員

會員功能大致分三個層次。第一層是「登入才看得到」,誰都可以註冊,或由你手動開帳號;第二層是「不同身分看不同內容」,例如學員看得到講義、合作夥伴看得到報價;第三層是「付費才能成為會員」,牽涉到收費、續訂、到期自動取消。

這篇處理前兩層。第三層要和金流、訂單綁在一起,就該用專門的會員或訂閱外掛,不適合自己用程式碼拼。

方法一:文章裡的一段內容只給會員看

先放上這段程式碼,就會多出一個叫 [members_only] 的短代碼:

// 1. 短代碼:[members_only]會員才看得到的內容[/members_only]
//    指定身分:[members_only role="customer"]……[/members_only]
add_shortcode('members_only', function ($atts, $content = '') {
    $atts = shortcode_atts(['role' => ''], $atts);
    if (!is_user_logged_in()) {
        $login = wp_login_url(get_permalink());
        return '<div class="mimi-locked">這段內容只開放給會員,請先<a href="'
             . esc_url($login) . '">登入</a>。</div>';
    }
    $roles = array_filter(array_map('trim', explode(',', $atts['role'])));
    if ($roles && !array_intersect($roles, wp_get_current_user()->roles)) {
        return '<div class="mimi-locked">這段內容只開放給指定的會員。</div>';
    }
    return do_shortcode($content);
});

在文章或頁面裡用「短代碼」區塊,把要鎖的內容包起來:

[members_only]
講義下載:https://你的網址/handout.pdf
[/members_only]

沒登入的訪客,看到的是「這段內容只開放給會員,請先登入」,登入連結會帶著目前這一頁的網址,登入完自動回到原本那一頁,不會被丟到後台首頁。已經登入的會員,看到的就是原本的內容。

想只給某種身分看,加上 role。例如 WooCommerce 的顧客身分是 customer,只想給買過東西的人看就寫 [members_only role="customer"];要開放給好幾種身分,用逗號隔開。使用者的身分在後台「使用者」列表就看得到。

我們在測試站用三個身分各看一次同一頁:訪客兩段鎖住的內容都看不到;一般顧客看得到給顧客的那段,看不到給管理員的那段;管理員兩段都看得到。我們也用網站的 REST API(外掛和 App 讀取文章內容用的管道)以訪客身分讀這一頁,鎖住的內容一樣沒有出現。

方法二:整個「會員專區」要登入才能進

如果內容很多,與其每段都包短代碼,不如做一個「會員專區」頁面,底下再放子頁面,整區鎖起來:

// 2. 整頁鎖起來:「會員專區」頁面和它底下的子頁面,沒登入就先去登入
add_action('template_redirect', function () {
    $area = get_page_by_path('members'); // 會員專區頁面的網址代稱
    if (!$area || is_user_logged_in() || !is_page()) {
        return;
    }
    $page = get_queried_object_id();
    if ($page === $area->ID || in_array($area->ID, get_post_ancestors($page), true)) {
        wp_safe_redirect(wp_login_url(get_permalink($page)));
        exit;
    }
});

做法是新增一個頁面,網址代稱設成 members,其他會員頁面在「頁面屬性」裡把「上層」設成它。沒登入的人打開這一區的任何一頁,會先被帶到登入頁,登入後回到原本想看的那一頁。

程式碼都放在 Code Snippets 這類外掛或子主題,放法和備份方式見〈WooCommerce 結帳頁改成台灣習慣〉。

鎖住的是網頁,不是檔案

這是最容易誤會的地方。上面兩種方法鎖的是「網頁上的內容」,如果你在會員內容裡放一個 PDF 的下載連結,那個 PDF 本身還是放在媒體庫,任何人只要拿到網址就能下載,會員把連結轉傳出去也擋不住。

講義這類檔案,比較穩的做法有兩個:放在需要權限的雲端硬碟,只分享給特定的人;或者做成 WooCommerce 的可下載商品(可以是 0 元),由系統管理誰能下載、下載幾次,做法見〈WooCommerce 賣電子書、講義、素材〉。影片則可以放在影音平台,設成不公開或限定網域嵌入。

還有幾件事要確認

會員要能註冊:如果你打算讓人自己註冊,到「設定 > 一般」的「成員資格」勾選「任何人均可註冊」,「新使用者的預設使用者角色」選「訂閱者」;有 WooCommerce 的網站,也可以用「我的帳號」頁面讓人註冊。

快取外掛要確認設定:大部分快取外掛只快取「沒登入」的訪客畫面,登入的會員看到的是即時內容,所以上面兩種做法都能正常運作。改完記得用無痕視窗(訪客)和會員帳號各看一次。

如果你喜歡用後台介面設定,也有現成的外掛提供類似的短代碼,用法差不多;挑一個還有在更新的就好。

會員專區是經營關係的地方

有了會員專區,學員、客人就有一個理由常回來你的網站,而不是只在社群上看你。講義、補充影片、會員限定的優惠,都可以放在這裡。等會員人數多了,再考慮付費訂閱,可以參考〈會員制、訂閱制怎麼做?〉。

如果你想做一個有會員專區、課程或付費內容的網站,可以先看〈IG 帳號不是你的資產〉想想網站要做到什麼。MIMI 專做客製化網頁設計,會員網站可以從註冊、權限到內容一起規劃。MIMI 提供台灣網頁設計服務,各縣市的講師、創作者都可以用電話、Email 和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。

WordPress 寄信進垃圾信件匣?用 SMTP 寄信的設定、Gmail 的寄件規定和檢查方法
GA4 追蹤電話、Email 和按鈕點擊:WordPress 網站一段程式碼搞定

發佈留言

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

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