WIING WebServiceCloudのWordPress用メディアブログテーマです。-WIING MEDIA

Web制作オンライン学習と企業ネットコンサルティング-WIING MEDIA

  • twitter WIING WebServiceCloud
  • Instagram WIING WebServiceCloud
  • facebook WIING WebServiceCloud
  • note WIING WebServiceCloud
  • WIING media ログイン
HOME 〉WordPress 〉Simple MembershipでWordPress会員サイトの制作学習

2021.08.11 Wed  2022.07.01

Simple MembershipでWordPress会員サイトの制作学習

WordPress

会員レベルのある会員制サイトの作成を学ぶ

今回は、WordPress会員制サイトで会員レベルを設定して、複数のユーザー権限や同じユーザー権限でも有効期限や閲覧制限、投稿閲覧可能なカテゴリーの制限が可能な、やや込み入った会員制サイトの制作について学習してみます。

Simple WP Membershipで会員制サイト

WordPressはもともと会員サイトですが、投稿閲覧制限や会員ごとにユーザー権限などを分ける場合は、直接ソースコードを改修するかプラグインを利用することになります。
当社では運用や改修、長期運営を考慮してプラグインを利用することにしました。

  • WordPressの会員制サイト用のプラグインは有償・無償でいくつかあるのですが、プラグインによっても、対応可能な機能に違いがあります。
今回は会員ごとにユーザー権限や有効期間が選択できて、導入や設定も比較的シンプルな「Simple WP Membership」を選択しました。

ほかTheme My Login など、導入や設定に手間がかからないプラグインも対象ではあったのですが、会員レベルを分けたいという機能要件から、Simple WP Membershipでした。

そのほか会員レベルごとに投稿できるカテゴリーを制御が必要だったので、「Restrict Categories」というプラグインを併用することにしました。 今回の会員レベルごとのカテゴリー制御は、直接の関数記述制御では、いろいろと都合に合致しないため、ダッシュボードからすぐに設定可能なRestrict Categoriesが最適でした。

どのプラグインをどのように導入するかは重要

なぜ会員制サイト用プラグインを使うのか

WordPressは標準で会員制機能が付属するCMSです。

ユーザー権限を分けてログイン、会員登録もパスワード再発行も可能です。 権限ごとに投稿や編集、プラグインやユーザー管理などの会員ランクも存在しています。

  • なぜあえて会員制サイト用のプラグインを使用するのでしょうか

当社の見解としては、

  • 会員登録画面や会員登録情報編集画面など拡張ページが自動で生成される
  • ユーザー毎に様々な表示閲覧制限を設定できる
  • ユーザー権限とは別に複数会員ランクを設定できる
  • ユーザーアカウントの有効期限が設定できる
ほかに色々あるかもしれませんが、主に上記のようになるかと考えられます。

このような便利な拡張機能をプラグインで利用できるのであれば、使用することで多機能会員制サイトが比較的容易に導入可能になるからです。

プラグイン利点を最大化する

会員制サイト化のためのプラグイン設定

Simple WP MembershipとRestrict Categoriesは、ダッシュボードのプラグイン新規追加し有効化します。 各設定などについては詳しく説明している解説ページをネット検索し、参考にしました。

どちらかといえば、プラグインインストール後の希望する機能要件への設定調整が割と手間がかかります。 上記の2つのプラグインのほか、function.phpへの関数を個別に設定したり、ACF(Advanced Custom Fields Plugin for WordPress)を併用して、会員ランク別の表示や投稿制限、ツールタグやアラート表示が中心になりました。

条件分岐や関数名などは後述していますが、テーマのための関数を設定することで、今回当社で希望した機能要件を完全に完全に実装することができました。

ほかのプラグインやプラグインのためのプラグインなどを併用することで実現できたかもしれませんが、後々の機能改修や機能調整、運用リスクやアップデート関連の不具合などを考慮すると、ベストな方法で設定できたのではないでしょうか。

また、WordPressテーマの会員制サイトに特化したパッケージで、複数機能が実装されている既存商品もありますが、ほかのプラグインとのコンフリクトの確率や対処の負担、一部の不具合でWordPressサイト全体が停止してしまう可能性や拡張性や改修等など懸念点が多いため、当初より導入対象とはしていませんでした。

これらのカスタムテーマはダッシュボードの機能利便性が優れている反面、コード量やファイル構成が比較的膨大で、改修や機能追加などが基本および最終的に開発元に依存しないといけないケースが多いです。 よって運用コストや負担などの面で、会員制サイト以外の場合でも原則導入対象とすることはほとんどありません。

ただ、必要機能を実装したパッケージ型のWordPressテーマは短期間の用途限定の使い切りにはかなり最適なので、運営状況と機能要件にあわせて選択していくと良いかもしれません。

希望する機能要件の調整に工数がかかりやすい

Simple WP Membershipの各画面カスタマイズ

Simple WP Membershipを有効化すると、固定ページに会員機能に関連する固定ページが追加されます。

  • デフォルトでは各フォームがtableタグで設定しているため、オリジナルデザインに変更するため、HTMLコードを編集する必要がありました。

アラートなどの位置は別ファイルでページ上部に追加されるため、追加方法なども注意が必要でした。 各画面用のファイルにショートコードでコンテンツ上部と下部の共通タグを設定するなどして、各ページのコンテンツ書式も共通にするために、プラグインPost Snippetsで別途コードを容易しました。

各画面のプラグインエディタファイル
会員登録画面のHTML出力
simple-membership/views/add.php
会員ログイン画面のHTML出力
simple-membership/views/login.php
会員パスワードリセット画面のHTML出力
simple-membership/views/forgot_password.php
会員プロフィール・変更画面のHTML出力
simple-membership/views/edit.php
各種メッセージや注意文などのHTML出力
simple-membership/classes/class.simple-wp-membership.php
ログインやアクセス回りの注意文などのHTML出力
simple-membership/classes/class.swpm-access-control.php
”アカウントを削除”などのボタンHTML出力
simple-membership/classes/class.swpm-utils.php
プラグイン自動アップデート無効化
上述のように、Simple WP Membershipはプラグインエディタで直接編集する必要があったため、 プラグインの自動アップデートで上書きされてまうともとに戻ってしまいます。

そのため、手動でアップデートできるようにSimple WP Membershipの自動アップデート通知をfunction.phpに追記して停止しておきます。

  • simple-membershipアップデート通知停止
add_filter('site_option__site_transient_update_plugins', 'plugin_update_stop');

function plugin_update_stop($data) {
$plugin_name = 'simple-membership/simple-wp-membership.php';
if (isset($data->response[$plugin_name])) {
unset($data->response[$plugin_name]);
}
return $data;
}

関数名はplugin_update_stopとなっていますが、任意の名称が可能です

アラート系の調整が少しわかりにくい構造です

会員レベルごとのダッシュボードの調整

HTMLで出力される画面のデザイン調整は上述したプラグインファイルでおおむね可能ですが、ダッシュボードの制御については、テーマのための関数(function.php)に個別の関数を追加していく必要があります。

function.phpで一元管理するとわかりやすいので、ひとまとめに記述しました。 関数や記述方法などについて言及すると、かなり長い解説文になるので、今回は主に使用した関数や条件分岐等について、まとめています。

ダッシュボード出力制御

今回は会員レベルごとに表示されるツールタグやアラート文、表示オプションやメニューナビの制御が中心になりました。

グローバル変数
global $pagenow;
⇒ダッシュボードで会員が現在表示しているページが代入される変数です。 使い方は、if($pagenow == ‘edit.php’)…など
global $member_rank;
$member_rank = SwpmMemberUtils::get_logged_in_members_level();
⇒Simple WP Membership用に用意した変数です。
SwpmMemberUtils::get_logged_in_members_level()関数でSimple WP Membershipで設定した会員レベルのIDを取得できます。 使い方は、if($member_rank == ‘2’)…など
global $expiry_date
⇒アカウントの有効期限を取得します。
$auth = SwpmAuth::get_instance();
$expiry_date = $auth->get_expire_date();
echo “アカウント有効期限: “.$expiry_date;

そのほか参照できるSimple Membership用の変数などの記載が公式サイトにあります。
英語ページですが、なんとなく見覚えのある英単語をもとに翻訳していくと、目当ての参照記述が見つかりました。

各種関数
current_user_can(‘edit_others_posts’) ⇒現在のユーザー権限の関数です。 edit_others_postsは他ユーザー投稿を編集可能なユーザー権限となるので、上記ではユーザー権限が編集者以上が対象になります。 使い方は、if(current_user_can(‘edit_others_posts’))…など
is_admin ⇒この関数は条件分岐で使用される真偽値型の関数で、ダッシュボードまたは管理画面にログインしているかどうかを判定します。 使い方は、if(is_admin)…など
各アクションフック・フィルターフック
admin_menu
管理画面メニューの基本構造が配置された後に実行。
admin_print_styles
HTML ヘッダーでCSS/スタイルシートを実行。
admin_enqueue_scripts
HTML ヘッダーでプラグインまたはテーマが JavaScript および CSS をすべての管理画面で実行できるようにする。
admin_notices
ネットワーク管理画面・ユーザー管理画面を除く管理画面メニューがページに出力後に実行。
admin_init
管理画面各ページがレンダリングされる前に実行。
admin_print_footer_scripts
JavaScript および CSS をすべての管理画面のbody閉じタグ直前で実行。
pre_get_posts
クエリが実行される前に実行。
主に以上のようになります。

アクションフックやフィルターフックとは、WordPressやプラグインが表示、実行されるタイミングを指定して個別の関数をコールできる仕組みです。 種類はたくさんあるので、カスタマイズ内容が上手く再現されない場合は、フックのアクション変更で改善されるかもしれません。

ダッシュボードカスタム関数はとても便利

Simple WP Membershipの導入手順

では実際にSimple WP Membershipを導入して会員サイトを作成してみましょう。

導入の手順と流れ

  1. Simple WP Membershipプラグインのインストール
  2. Simple Membership After Login Redirectionプラグインのインストール
  3. Restrict Categories プラグインのインストール
  4. Simple WP Membershipの基本設定
  5. Simple WP Membership各固定ページ名設定
  6. Simple WP Membershipプラグインエディタ設定
  7. 各会員用画面をCSSでデザインカスタムします
  8. テストアカウントを作成してログイン等の動作確認

以上のような手順がおおよその流れになります。
そのほか会員レベルなどを用途にあわせて設定していきます。

会員制サイト制作の総括

今回は会員レベル設定が手軽に導入できる点もあり、Simple WP Membershipを中心にWordPressによる会員制サイトを制作してみました。

メリット
  • 会員制サイト構築が比較的容易にできる
  • 会員レベル毎の登録画面の設置も簡単
  • 有効期間などを会員レベルで指定できる
  • 会員レベルごとに細かく閲覧制限ができる
  • 改修やメンテナンスが軽度
デメリット
  • 機能要件を満たすためにプラグイン以外と複合的な設定が必要になる
  • プラグインファイルが大量に追加される
  • 各画面HTML編集をした場合はプラグインアップデート後に上書きされる
  • 会員制機能がプラグインに完全依存される

結論的にメリット面の方が大きく、デメリットについてはどのようなプラグインやWPテーマでも共通する内容になりデメリットでもないかもしれないですね。

決済機能について
決済機能はプラグイン付属機能や別の専用プラグイン導入などがありますが、初期設定や管理、メンテナンスに手間と時間がかかり経費対効果もあまりないので、決済機能は外部SaaSに分離して導入することにしました。

過去にEC-CUBEやWordPressのカートシステム導入や決済サービスの紐づけなどの経験から、特段の事情がない限りECシステムは外部システムを利用した方が高効率かつ合理的であると考えられるからです。 使用したSaaSシステムは越境ECにも対応できるようで、Baseネットショップで商品・サービス購入と決済処理を一括分離して運営することにしました。

カスタマイズについて
正直、カスタマイズについては手間がかかりますが、好みの機能実装が可能なので、既存のプラグインをそのまま導入しても希望通りの会員制サイトにならない場合が多いかもしれません。
  • WordPressテーマに会員制機能が一体型の場合は、さらにカスタマイズに費用や工数がかかることも予想されます。
どちらにしてもフルスクラッチで開発すると途方もない費用や工数、保守費用が発生するので、折り合いをどの辺にするかで、WordPressを直接プチスクラッチする方向でまずは導入することがベストかと判断されました。

一つの機能付加でも、ほかの機能やプラグインと整合性が取れないことなども発生しうるので、

  • WordPressとプラグインで会員制サイトは簡単に導入できる

という認識はきわめて危険かもしれません。

WordPressでも会員制サイト制作はわりと工数が必要

WIING MEDIA twitter

WIING MEDIA facebook

掲載情報につきましては当社が独自に調査、検証および収集した情報です。

情報の妥当性や確実性を一切保証するものでなく、情報や内容が訂正や修正、変更されている場合があります。 よって、当社サイトの利用により生じたいかなる損害等についても運営側にて一切の責任を負いません。

掲載情報の修正・変更等をご希望の場合はお知らせください。