質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

2回答

1700閲覧

WordPressプラグインのSimple membershipで特定の会員レベルの会員登録時にカスタムフィールドに値をセットさせたい

seven0321

総合スコア10

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2022/03/27 12:18

初めて質問させていただきます。

経緯:
WordPressのプラグインを使った教室運営システムのメンテナンスをしているのですが、フロントの会員登録フォームが独自HTMLで仕様的に問題があったので、Stripe等のクレジットカード連携処理が標準で搭載されていることもあり、会員登録の部分はSimple membershipを使うことに決定しました。

【今まで行っていたこと】
生徒登録用の独自HTMLフォームを作成
IDとパスワードとメールアドレスのみの入力フォームで登録ボタンにname=student_submitをセット

functions.phpでの処理:
講師登録用のHTMLフォームからPOSTされたらstudent-entry.phpを呼ぶ
if(isset($_POST['student_submit'])){
get_template_part( 'inc/student' , 'entry' );
}

teacher-entry.phpでの処理:
講師登録用の独自HTMLフォームから値を受け取ったら権限はauthorをセットしてWordPressでのユーザー登録処理。
$userdata = array(
'user_login' => $user_name, // ログイン名
'user_pass' => $user_pass, // パスワード
'user_email' => $user_email, // メールアドレス
'role' => 'author', // 権限
);
$user_id = wp_insert_user( $userdata );

☆ユーザー登録処理の際は同時にmemberというカスタムフィールドにstudentという値をセット
function user_cf_set($user_id) {
$user = get_user_by( 'id', $user_id);
if( in_array( 'author' , $user->roles , true ) ) {
update_user_meta($user_id, 'member', 'student');
}
}
add_action( 'user_register', 'user_cf_set', 10, 1 );

調べたこと・試したこと:
1.Simple MembershipはForm Shortcodeというアドオンを使えばユーザー権限ごとの登録フォームを作成できるため、author権限専用の会員レベルと登録フォームを作成しました。

2.またSimple Membershipはユーザー登録情報はWordPressで使っているDBテーブルとは別の独自テーブルに値を保持するようですが、Simple MembershipはWordPressユーザーを強制同期できる機能があるため、Simple Membershipで作成したauthor権限専用の登録フォームから会員登録を行うとWordPressユーザーにもauthor権限のユーザーが同時に作成されることが確認できました。

やりたいこと:
上記1,2まではよかったのですが、今まで行っていた上記☆の処理、Simple membershipからauthor権限の新規会員を登録する時に、memberというカスタムフィールドにstudentという値をセットさせることがどうしてもできません。

Simple membershipの独自関数でないとユーザー登録時の情報が取れないようなのですが、いかんせん独自関数に関する情報と時間が足りず、誠に恐縮なのですがfuctions.phpに記載する、Simple membershipからauthor権限の新規会員を登録する時にmemberというカスタムフィールドにstudentという値をセットさせるコードをご教示いただけないでしょうか。

大変あつかましいお願いとは思いますが、どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました。

新規ユーザー追加時に権限レベル判定をさせなければSimple membershipでもupdate_user_metaで新規登録時のユーザーのカスタムフィールドに値をセットできることは確認できたのですが、特定権限ユーザーの追加時のみupdate_user_metaでカスタムフィールドに値をセットさせようとすると、Simple membershipでの新規ユーザー登録時のみカスタムフィールドに値がセットされない(いまだ解決策は分かりません)ので、視点を変えて

Simple membershipでの特定権限のユーザー登録時のフォームから権限レベルを拾い、その権限レベルだったらupdate_user_metaでカスタムフィールドに値をセットする

というロジックにすることで、当初の目的を達成できました。

function user_cf_set($user_id) {
if(isset($_POST['membership_level'])){
$level = $_POST['membership_level'];
switch ($level) {
case '3':
$user = get_user_by( 'id', $user_id );
update_user_meta($user_id, 'member', 'student');
break;
}
} else {
}
}
add_action( 'user_register', 'user_cf_set', 10, 1 );

なおこの方法場合、例えば上記ロジックでは権限レベルがSimple membership上で会員レベルID=3として事前定義されてなければならないのと、元の会員レベルが削除や変更された場合はそれに応じて都度変更されたIDを比較対象とする必要があります。

ただ自分としては当初の目的が達成できたので、これでクローズといたします。

投稿2022/03/29 02:31

seven0321

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1$user_id = wp_insert_user( $userdata );

ここが問題無く動作してるなら、その続きでupdate_user_meta()

PHP

1$user_id = wp_insert_user( $userdata ); 2update_user_meta($user_id, 'member', 'student');

☆以下のコードは不要

投稿2022/03/27 15:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seven0321

2022/03/27 23:34

Space-Monkey 様 早速のご回答誠にありがとうございます。 私の質問の書き方が悪かったのだと思いますが、Simple Membershipで会員登録させるのでfunctions.phpでwp_insert_userはしないのと、author権限のみでユーザーメタ情報を更新(memberフィールドにstudentをセット)させたいのです。 同じくteratailにSimple Membershipに関する似たような質問と回答があったので、 https://teratail.com/questions/103316 これを参考に取り急ぎ下記コードをfunctions.phpに追記してSimple Membershipからauthor権限で新規会員登録してみましたが、author権限で会員登録はできるもののmemberフィールドにstudentをセットすることはできませんでした。 function user_cf_set( $member_info ) { $email = get_user_by( 'email', $member_info['email'] ); if( isset( $member_info['membership_level'] ) ) { $level = $member_info['membership_level']; } if($level == '3') { update_user_meta($email , 'member', 'student'); } } add_action( 'swpm_front_end_registration_complete_user_data', 'user_cf_set' ); ※Simple membsership上でautor権限の会員レベル(membership_level)は3で設定しています 取り急ぎの返信とさせていただきます。 以上、よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2022/03/28 03:30

>functions.phpでwp_insert_userはしない 自分はどこにもそんな事は書いてない。 wp_insert_user()の返り値は新規追加されたユーザーのIDなので、そのユーザーIDでupdate_user_meta()を実行すればメタ値が追加される。 だからuser_cf_set()と定義した関数は要らないって事。
seven0321

2022/03/28 06:06

Space-Monkey 様 なるほど私に誤解があったようで大変失礼いたしました。 確かにおっしゃる通りですね。もう少し自分で試してみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問