楽天セール開催中!ポイント最大11倍! セール会場へ

WordPress│noteライクな会員制サイトの作り方│WP-Members

WP-MembersではWordPressの記事をログイン状態やメンバーシップに応じて表示できます。本記事は登録と表示制限の設定例です。有料会員の権限管理は、単なるログイン判定と分けて設計してください。

登録されたメンバー限定の記事を公開することができますが、

  • 登録時にアンケートを収集できる
  • 期間限定公開ができる
  • PayPalと連携してサブスクリプション機能が付与できる
  • さらにカスタマイズすればnoteのような部分的な会員限定記事の表示もできる

とすぐれたプラグインです。

本記事ではWP-Membersのできることや使い方、カスタマイズを紹介します。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

WP-Membersのできること・特徴

WP-Membersでできることをまとめました。

投稿表示の制限が設定できる

投稿・固定記事ごとにメンバー向け限定か、プラン別のメンバーシップ限定かの制限を設けることができます。

投稿や固定記事ごとにメンバー向け限定などの表示制限を設定できる画面。

部分的な表示切り替えには、標準の会員向けショートコード、または後述のカスタマイズを使います。

後述の独自ショートコードはログイン済みユーザー向けです。料金の支払い・有効期限・プラン加入を判定する機能はありません。

期間限定の設定ができる

設定からメンバーシップを有効化すると、メンバーシッププランが設定できます。

設定からメンバーシップを有効化してプランを設定できる画面。

またユーザーが会員登録した際にメンバーシップに自動加入することができますので、

登録日から一ヶ月限定、または指定期間内等の設定もできます。

ユーザー登録時の自動加入や登録日から一ヶ月限定などの期間を設定できる画面。

もちろん先の項目で書いた通り、このメンバーシップごとの限定記事として設定することもできます。

PayPal連携でサブスクリプション機能が追加できる

有料の追加拡張機能を導入すると、決済機能を追加できます。価格や対応条件は、購入前に公式の商品ページで確認してください。

その他の拡張機能

有料になりますが、他にも拡張機能がさまざまあります。

うまく機能を使いこなせば、魅力的なサブスクリプションサイトが作成できるかもしれません。

拡張機能名備考料金・提供条件
Advanced Options本来、functions.phpで実装する機能が最初からつけることができます。公式で確認
Download Protectダウンロードの保護機能公式で確認
Invite Codes招待コード機能公式で確認
MailChimp IntegrationMailchimpのメルマガ機能との統合公式で確認
Memberships for WooCommerceWooCommerceの商品とWP-Membersのメンバーシップを連携公式で確認
PayPal SubscriptionsPayPalの決済機能との統合公式で確認
Securityセキュリティ強化公式で確認
Stop Spam Registrations登録スパム対策(現在の提供状況を公式で確認)公式で確認
Text String Editorテキストで編集できる部分が拡張できる公式で確認
User Listユーザーリストが拡張できる公式で確認
User Trackingユーザートラッキングが拡張できる公式で確認
Pro Bundle複数拡張と1年間のサポート・更新をまとめたセット。対象拡張は公式で確認公式で確認
Send Test Emails検証用の機能公式で確認

表の各機能は提供状況を含め公式の拡張一覧で確認してください。旧価格は削除しました。契約するライセンスの対象サイト数・年間更新・同梱範囲は購入時の商品ページで確認します。

WP-Membersを使った会員限定サイトの作り方

WP-Membersで最もシンプルなチュートリアルを書きました。

以下、サンプルサイトです。

WordPressの設定

フィードとコメントの設定を確認します。この2つだけで限定情報の保護が完了するわけではありません。ログアウト状態で本文・抜粋・検索・REST API・キャッシュを確認してください。画像やPDFへの直接アクセスは別の保護が必要です。公式のファイル保護の説明も参照してください。

RSSを抜粋に

管理画面 > 設定 > 表示設定 >

フィードの各投稿に含める内容を抜粋に変更

表示設定でフィードの各投稿に含める内容を抜粋に変更する画面。

コメント

管理画面 > 設定 > ディスカッション

ユーザー登録してログインしたユーザーのみコメントをつけられるようにするにチェック

ディスカッション設定で登録済みログインユーザーのみコメント可能にする画面。

登録ページとユーザープロフィールページの作成

この手順では登録ページとユーザープロフィールページを用意し、作成後にプラグインの設定へ各URLを登録します。

プロフィールページの設定はパスワード変更・再設定の導線にも使います。確認メールを使う場合は確認リンク設定も有効にし、[confirm_link]が実際のURLへ展開されるか試してください。公式のメール用タグ一覧で用途を確認できます。

登録ページ

固定記事を1つ、新規で作成します。

本文は[wpmem_form register]というショートコードを記入してください。

固定記事の本文に登録用のショートコードを入力して登録ページを作成する画面。

ユーザープロフィールページ

本文は[wpmem_profile]というショートコードを記入してください。

本文に指定のショートコードを入力してユーザープロフィールページを作成する画面。

WP-Membersのオプション設定

今回はシンプルな導線にしてますので、ほとんどの機能を切っています。

  • 全体の初期設定は制限しないにし、保護する投稿では個別に制限を有効にします。プラン限定の場合は必要なメンバーシップも指定します。全体設定だけでは記事は保護されません。
  • ログインフォームや登録フォームは投稿記事だけ表示するようにチェックをいれています。
コンテンツ制限を行わずログインフォームなどを投稿記事のみ表示する設定画面。

確認メール・管理者承認・パスワード設定方式は運用に合わせて選びます。掲載画像と同じ設定を無条件に使わず、選択した方式に合う登録メールを用意してください。

リンクの確認をしたい場合や、承認したい場合はチェックを入れましょう。

リンクの確認や承認に関するチェック欄を含むオプション設定画面。

会員登録フォームとユーザープロフィールページだけ登録しています。

会員登録フォームとユーザープロフィールページのみを登録している設定画面。

以上です。

メンバーシップの作成

こちらの設定は必須ではありませんが、登録した会員を期間限定の制限をかけてみます。

WP-Membersのオプションメンバーシップ機能を有効化

WP-Membersオプションからメンバーシップを有効化をONにしましょう。

管理画面にメンバーシップというメニューが作成されます。

オプションでメンバーシップを有効化して管理画面にメニューを追加する設定画面。

メンバーシップの作成

名前(スラッグ)を設定しましょう。

この無料の期間限定例では、登録時にメンバーシップを自動付与します。購入者限定の有料プランでは登録者全員への自動付与を有効にしないでください。

有効期限を設定して、このメンバーシップによる閲覧権限を1か月で終了させます。WordPressのユーザーアカウント自体を停止・削除する設定ではありません。公式のメンバーシップ設定も確認してください。

メンバーシップの名前・自動付与・有効期限を設定する画面。

WP-Membersのダイアログ設定

今回はエラーの文言の和訳はスキップします。

WP-Membersのフィールド設定

会員登録時、色々なフォームを設定して情報が取得できます。

今回はすべてのチェックを外して、設定を保存します。

フィールド設定のすべてのチェックを外して保存する画面。

WP-Membersのメール設定

会員登録に使うメールのメッセージが英語のままなので、日本語に直します。

日本語訳

新規ユーザー登録

件名

[blogname]へのご登録情報

本文

[blogname]へのご登録ありがとうございます!

あなたの登録情報は下記の通りです。

ユーザー名: [username]
パスワード: [password]

あなたのパスワードは下記から変更できます。

[user-profile]

登録を行ったページへのリンクは下記になります。

[reglink]

リンクの確認をしない場合の文言です。

この文例は自動生成パスワードをメール送信する方式のものです。登録者がパスワードを設定する方式や確認リンク方式では、その設定に合う初期文面を基に編集してください。メール用タグを無条件に削除するとログイン情報が届かなくなるため、テスト会員で受信とログインを確認します。

パスワードのリセット

件名

[blogname]のパスワードリセット

本文

[blogname]のパスワードリセットがリクエストされました。

以下のリンクをクリックしてパスワードをリセットしてください:
[reset_link]

もし[blogname]のパスワードリセットをリクエストしていない場合は、このメッセージを無視してください。

リンクには有効期限があります。期限切れの場合は再設定を申し込んでください。

ユーザー名の回復

件名

[blogname]のユーザー名

本文

[blogname]のユーザー名が以下に記載されています。

ユーザー名: [username]

署名 (任意)

本文

このメッセージは[blogname]からの自動送信メールです。

このアドレスには返信しないでください。

会員登録の流れの確認

会員登録するボタンを設置して、登録ページを表示するようにしておきます。

会員登録ボタンを設置して登録ページへ誘導する表示例。

ユーザー名とメールを入力して会員登録します。

※ユーザー名は他のユーザーと被らない名前にしましょう。

ユーザー名とメールアドレスを入力して会員登録を行うフォーム画面。
会員登録の手続きを行う画面。

登録後、登録したメールを確認します。

会員登録後に届く確認メールの文面例。

迷惑メールに入っている可能性もあるので、無い場合は探しましょう。

メールのユーザー名とパスワードを使ってログインします。

メールに届いたユーザー名とパスワードを入力してログインする画面。

ログイン後、先ほどの記事に戻ると会員限定コンテンツが表示されています!

自動で元の記事に戻るには次のカスタマイズの項目を参考にしてください。

ログイン後に元の記事へ戻り会員限定コンテンツが表示されている様子。

WP-Membersのカスタマイズ

以下は未実行のカスタマイズ例です。子テーマのfunctions.phpとプラグイン設定を控え、検証環境で試してください。コードは追記用で、ファイル全体を置き換えません。

ログイン後に遷移元ページにリダイレクト

限定記事へ未ログインでアクセスした後にログインした場合、直前に閲覧していた記事URLへリダイレクトするカスタマイズ例です。

WordPressの条件分岐タグ(is_page()など)はinitアクション実行時点ではメインクエリ未確定のため正しく判定できません。そのためセッション開始はinitで行い、戻り先URLの記録はクエリ確定後のtemplate_redirectで実行します。またオープンリダイレクトを防ぐためwp_validate_redirect()で許可されたホストへのURLかを検証します。

is_page('login')の引数はご自身のログイン固定ページのスラッグに合わせて変更してください。子テーマのfunctions.phpに追加します。

function waza_init_session_start() {
    if ( is_admin() || wp_doing_ajax() || wp_doing_cron() ) {
        return;
    }
    if ( session_status() === PHP_SESSION_NONE && ! headers_sent() ) {
        session_start();
    }
}
add_action( 'init', 'waza_init_session_start' );

function waza_save_previous_page() {
    if ( is_admin() || is_page( 'login' ) || is_user_logged_in() ) {
        return;
    }
    if ( session_status() === PHP_SESSION_ACTIVE && ! empty( $_SERVER['REQUEST_URI'] ) ) {
        $_SESSION['waza_expage'] = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );
    }
}
add_action( 'template_redirect', 'waza_save_previous_page' );

function waza_login_redirect( $redirect_to, $user_id ) {
    if ( session_status() === PHP_SESSION_ACTIVE && ! empty( $_SESSION['waza_expage'] ) ) {
        $ref = $_SESSION['waza_expage'];
        unset( $_SESSION['waza_expage'] );
        return wp_validate_redirect( $ref, home_url() );
    }
    return $redirect_to ?: home_url();
}
add_filter( 'wpmem_login_redirect', 'waza_login_redirect', 10, 2 );

参考

会員限定記事だけにクラスを付ける

次のコードは投稿メタ_wpmem_blockが1の個別記事へbodyクラス(restricted-post)を付与する例です。プラグインの全体設定やプラン別の実効権限をすべて判定するものではなく、このCSSクラス自体に閲覧制限の効果はありません。アーカイブや404ページなど個別投稿以外の画面で$postが未定義(null)となり警告が発生するのを防ぐため、is_singular()で対象を個別記事に限定します。

function waza_add_restricted_body_class( $classes ) {
    if ( ! is_singular() ) {
        return $classes;
    }
    global $post;
    if ( $post && function_exists( 'wpmem_securify' ) ) {
        $is_restricted = get_post_meta( $post->ID, '_wpmem_block', true );
        if ( '1' === (string) $is_restricted ) {
            $classes[] = 'restricted-post';
        }
    }
    return $classes;
}
add_filter( 'body_class', 'waza_add_restricted_body_class' );

参考

応用カスタマイズ

この先で紹介するカスタマイズ
  • 記事内の一部だけ会員限定にする
  • ログイン後に前の表示したページに戻る

記事内の一部だけ会員限定にする

記事内の一部をログイン済みユーザーへ表示し、未ログイン時にはSWELLのブログパーツの案内を返す例です。下のコードはプラン加入・支払い・有効期限・承認状態を判定しません。有料限定や期限付きコンテンツの制御にはそのまま使わないでください。

なお、WP-Membersには標準で[wpmem_logged_in]会員向け内容[/wpmem_logged_in]および[wpmem_logged_out]非会員向け案内[/wpmem_logged_out]ショートコードが備わっています。プラン限定にする場合は標準ショートコードのmembership属性などを使い、公式のログイン状態ショートコードに従って対象プランを指定します。属性なしのログイン判定だけでは期限切れユーザーも対象になり得ます。

function waza_members_only_shortcode( $atts, $content = null ) {
    if ( is_user_logged_in() ) {
        return do_shortcode( $content ?? '' );
    }
    // 非ログイン時は指定IDのブログパーツを表示
    $atts = shortcode_atts( array( 'notice_id' => '20' ), $atts, 'members_only' );
    $notice_id = absint( $atts['notice_id'] );
    return $notice_id ? do_shortcode( '[blog_parts id="' . $notice_id . '"]' ) : '';
}
add_shortcode( 'members_only', 'waza_members_only_shortcode' );

本文中での使用例です。notice_idや囲み内のblog_parts idは、ご自身の環境で作成したSWELLブログパーツのIDに置き換えてください。

[members_only notice_id="20"][blog_parts id="14"][/members_only]

以下、サンプルサイトです。

ログイン後に前の表示したページに戻る

コードは非公開です。

部分的な表示制限だけを理由に、先のリダイレクトが必ず動かなくなるわけではありません。遷移元の保存、ログイン画面の除外、使用フォーム、セッション継続性によって動作が変わります。

登録・プロフィールページを経由すると保存したURLが上書きされる可能性があります。先の例はその全経路を扱っていないため、導線ごとに戻り先を試してください。非公開コードの導入手順や動作は本記事では保証していません。

まとめ

noteのような部分的に非表示にする機能を作りたかったのですが、結果的にブロック単位で会員限定の表示・非表示ができたので満足です。

WP-membersに決済機能も追加できるので、うまく使いこなすと独自のマネタイズ機能が付いたサイトも作ることができるとおもいます。

ぜひ参考にしてください。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/WAZA-codeにもまとめています。

確認した環境・未確認の点と復旧手順

2026年10月11日に掲載コードを読み、条件分岐の実行時点・リダイレクト先の検証・nullへの対処を公式資料と照合しました。コードを検証用サイトへ導入して実行する試験は行っていません。

PHPセッションを使う例はページキャッシュやREST APIと干渉する可能性があります。管理画面・Ajax・Cronは除外していますが、REST APIを含むすべてのリクエストでの互換性は未確認です。既存の同名関数や古いコードと重複して追加せず、ログイン前後・外部URLへの遷移抑止・キャッシュ利用時を検証してください。

有料拡張機能「PayPal Subscriptions」による実課金決済や外部サブスクリプション連動、ページキャッシュプラグイン併用時のセッション継続性については今回の更新では実環境検証を行っていません。本番導入前に検証環境での会員登録・ログイン導線の動作確認を行ってください。

カスタマイズを戻す場合は、子テーマのfunctions.phpに追加した関数とフック登録(waza_init_session_start、waza_save_previous_page、waza_login_redirect、waza_add_restricted_body_class、waza_members_only_shortcode)を削除し、投稿本文に挿入したショートコードを外してください。WP-Membersの設定を変更した場合は、導入前に控えた設定へ戻してください。

関連情報:エラーログの出力・確認方法、公式ドキュメント:WP-Members Documentation。

よくある質問:WP-Membersでnoteライクな会員制サイトを作るとき

WP-Membersでは、どんなことができますか?

記事では、登録されたメンバー限定の記事を公開でき、登録時にアンケートを収集できます。期間限定公開もでき、有料の拡張機能を導入するとPayPalと連携してサブスクリプション機能を付与できます。さらにカスタマイズすれば、noteのような部分的な会員限定記事の表示もできます。

記事ごとに、会員限定にできますか?

できます。記事では、投稿・固定記事ごとにメンバー向け限定か、プラン別のメンバーシップ限定かの制限を設けることができます。部分的な表示切り替えには、標準の会員向けショートコード、または記事のカスタマイズを使います。

拡張機能の料金は、いくらですか?

拡張機能ごとに契約条件が異なります。表は機能選定用で、料金・対象サイト数・更新条件・同梱範囲は公式の商品ページで確認してください。

限定記事の情報が漏れないように、先に何を設定しますか?

記事では、管理画面 > 設定 > 表示設定で、フィードの各投稿に含める内容を「抜粋」に変更します。また、設定 > ディスカッションでコメント投稿者をログインユーザーへ限定します。これは本文・既存コメント・添付ファイル全体のアクセス保護ではありません。別途、未ログイン時の本文・抜粋・検索・API・直接URL・キャッシュを確認します。

登録ページとユーザープロフィールページは、必要ですか?

この手順では2つのページを作成し、プラグインへURLを登録します。確認メール・パスワード再設定の設定とメール用タグを合わせ、実際に届くリンクを試してください。

期間限定の会員には、どう設定しますか?

記事では、WP-Membersのオプションでメンバーシップ機能を有効化し、メンバーシップを作成します。会員登録時にデフォルトでこのメンバーシップが適用されるようにして、限定のオプションをONにすると、1か月後にそのメンバーシップの閲覧権限が期限切れとなるように設定できます。ユーザーアカウント自体の停止ではありません。有料プランを登録者全員へ自動付与しないよう注意してください。

メールの文面は、どう直しますか?

記事では、会員登録に使うメールのメッセージが英語のままなので、WP-Membersのメール設定で日本語に直します。新規ユーザー登録、パスワードのリセット、ユーザー名の回復、署名の文面例を掲載しています。

記事内の一部だけを会員限定にできますか?

できます。ただし掲載した独自コードはログイン済みかどうかだけを判定します。有料プランや期限付き閲覧には、標準ショートコードのmembership属性などで必要な権限を指定し、期限切れ・未加入のユーザーでも確認してください。

このカスタマイズは、どこまで検証されていますか?

記事では、2026年10月11日に掲載コードを読み、公式資料と照合しましたが、コードを検証用サイトへ導入して実行する試験は行っていません。PHPセッションを使う例は、ページキャッシュやREST APIと干渉する可能性があります。有料拡張機能による実課金決済や、ページキャッシュプラグイン併用時の動作も未検証なので、本番導入前に検証環境で会員登録・ログイン導線を確認します。

  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次