事例紹介(復旧・実戦系)

WP-Membersの標準機能をさらに強化したお話

WP-Membersの標準機能をさらに強化したお話
この記事の目次 読みたい項目へ移動
WEBさん
WEBさん

WP-Members の標準だけで会員サイトを組むと、後で「あと一歩のカスタマイズ」に必ず詰まります。最初に拡張ポイントを押さえておくと後が楽です。

※ 本記事は2023年当時の事例です。 現在の WordPress/PHP 環境では推奨手順が変わっている可能性があります。最新の対応方針は 復旧サービス または 窓口の使い分け から確認ください。
WordPress で会員制サイトを作成する場合、WP-Members というプラグインが利用できます。

WordPress にはもともとユーザー管理の仕組みがあります。複数のユーザーアカウント作成や権限設定など、各種制御が可能です。

WP-Members は、WordPress 標準のユーザー管理機能を強化し、ユーザー登録やログインの仕組みを提供するプラグインです。

ただし、このプラグインの標準機能だけでは満足できる会員制サイトには仕上がりません。

今回は、ユーザー体験をさらに向上させる便利な PHP コードを紹介します。

ココナラで会員制サイトの制作を受託した際に実装した PHP コードを、備忘のためまとめました。やや雑な記述かもしれませんが、一読いただけると嬉しいです😌

はじめに

プラグインのインストール・設定について、詳しくまとめてあるサイトがあります。そちらをご覧ください (さっそく雑です🤣)。

基本的な設定方法からカスタマイズまで解説されています。

それでは、上記サイトで解説されていない便利な PHP コードを紹介していきます。

ログイン時

会員登録後に確認ページへ案内する機能

承認制やメール確認を使うサイトでは、登録完了とログイン許可は別です。ここでは認証Cookieを発行せず、受付完了ページへ案内する例に改めます。ログインはWP-Membersの通常の認証処理を通してください。
function wn_registration_notice( $fields ) {
    // WP-Membersの登録処理から渡されたIDを確認する。POSTのメールで認証しない。
    $user_id = isset( $fields['ID'] ) ? absint( $fields['ID'] ) : 0;
    if ( ! $user_id || ! get_user_by( 'id', $user_id ) ) {
        return;
    }
    // 事前に公開の受付完了ページを用意し、承認・メール確認の案内を掲載する。
    // 認証Cookieは発行しない。登録メールの確認後は通常のログインへ進む。
    wp_safe_redirect( home_url( '/registration-received/' ) );
    exit;
}
add_action( 'wpmem_register_redirect', 'wn_registration_notice', 10, 1 );
PHP

ログイン後の管理バーを非表示にする機能

ログイン直後に、WordPress 標準の管理バーが表示される場合があります。

余分な情報を見せないようにする処理を、以下に示します。
function hide_admin_bar(){
	$user = wp_get_current_user();
	if (isset($user->data) && !$user->has_cap('edit_posts')){
		show_admin_bar( false );
	}
}
add_action( 'after_setup_theme', 'hide_admin_bar' );
PHP

ログイン後に元のページに戻る機能

ログイン直後は、引き続き元のページを閲覧したい場面があります。

次の例はWordPress標準のlogin_redirectを使います。第3引数の認証結果を確認し、購読者は許可リスト内のページだけへ戻します。WP-Members独自フォーム経由でも同じフックを通るとは限らないため、利用するログイン経路で別途確認してください。
function afterlogin_function( $redirect_to, $requested_redirect_to, $user ) {
    $fallback = home_url( '/' );
    if ( ! $user instanceof WP_User ) {
        return $fallback; // 認証失敗やユーザー未取得
    }
    if ( ! in_array( 'subscriber', (array) $user->roles, true ) ) {
        return wp_validate_redirect( $redirect_to, $fallback );
    }
    // 同じサイトの、公開方針を確認したページだけを許可する。
    $allowed = array( home_url( '/' ), home_url( '/members/' ) );
    $target = wp_validate_redirect( $requested_redirect_to, $fallback );
    return in_array( $target, $allowed, true ) ? $target : $fallback;
}
add_filter( 'login_redirect', 'afterlogin_function', 10, 3 );
PHP

ログアウト時

ログアウト後にリダイレクトする機能

ログアウト時に「個別に用意したページ」や「トップページ」へリダイレクトさせたい場合の処理です。
function my_logout_redirect(){
	return 'リダイレクト先のURL';
}
add_filter( 'wpmem_logout_redirect', 'my_logout_redirect' );
PHP

まとめ

プラグイン「WP-Members」の基本設定やカスタマイズでは実現できない部分を紹介しました。

本プラグインと組み合わせれば、より UX を高めた会員制サイトを作れるはずです。

もし「分からない」「動かない」「エラーが出る」など困った場合は、WEB 先案内にご相談ください m(_ _)m
WEBさん
WEBさん

会員機能を入れたあとに「この項目を増やしたい」「この権限を分けたい」が出てきたら、一度設計を見直すタイミングかもしれません。

コメントを残す

メールアドレスは公開されません。* は必須項目です。

CAPTCHA