WordPressのユーザー登録時にFirebase(Cloud Firestore)へデータを追加する方法

こんばんは、ゾノ( @ozonosho )です。
さて、今日のブログではWordPressのユーザー登録時にFirebaseへデータを追加する方法を紹介したいと思います。
具体的には、Wordpress側で新規ユーザーを登録した時にFirebaseのデータベースにも同じユーザー情報(名前やメールアドレス、趣味など)を挿入して同期させるための方法です。
ピンポイントのニーズは少ないかもしれませんが、ブラウザからFirebaseにデータを挿入したり、ブラウザ版とアプリ版で別のデータベースを利用している場合にお互いのデータを連携したりするときの参考になれば幸いです。
尚、Firebase側のデータべースは「Realtime Database」ではなく「Cloud Firestore」を利用した実装方法となります。
実装方法
実装は下記の4ステップでおこないます。
- Firebaseを利用するための初期化スぺニットを記載する
- Firebaseのユーザーアカウント(Authentication)を作成する
- 作成したユーザー情報を取得して任意のコレクションにデータを追加する
- 1~3の処理をWordpressのユーザー登録時に実行する
それぞれ説明していきます。
①Firebaseを利用するための初期化スぺニットを記載する
まずはWebでFirebaseを利用するために必要な初期化スぺニットを記載します。
<script src="https://www.gstatic.com/firebasejs/5.3.1/firebase.js"></script>
<script>
//Initialize Firebase
var config = {
apiKey: "<ウェブAPIキー>",
authDomain: "<プロジェクトID>.firebaseapp.com",
databaseURL: "https://<データベース名>.firebaseio.com",
projectId: "<プロジェクトID>",
storageBucket: "<Bucket名>.appspot.com",
messagingSenderId: "<送信者ID>"
};
firebase.initializeApp(config);
</script>
上記コード内のウェブAPIキーなどはFirebaseのコンソール画面よりそれぞれ確認できます。また、コンソール画面のAuthentication内にある「ウェブ設定」ボタンからすべての情報をまとめて確認することもできます。
②Firebaseのユーザーアカウント(Authentication)を作成する
今回はWordpressの登録ユーザーに紐づく情報をCloud Firestoreに追加したいため、まずはFirebase側にも同じユーザーのアカウントを作成します。
Firebaseの初期化スぺニットを読み込んだあとは、メールアドレスとパスワードを渡せば簡単にアカウントを作成できる関数を利用できます。
<script> var email = "<メールアドレス>"; var password = "<パスワード>"; //Firebaseのユーザーアカウントを作成 firebase.auth().createUserWithEmailAndPassword(email, password); </script>
これでFirebase側にユーザーのアカウントを作成することができました。
③作成したユーザー情報を取得して任意のコレクションにデータを追加する
Firebase側にユーザーのアカウントを作成するとユーザー固有のID(uid)が発行されるので、まずは作成したユーザーのuidを取得します。
コレクションにユーザー情報を追加する際にはuidをドキュメントIDに割り当てて追加します。そうすることでユーザー情報が複数のコレクションにまたがっても同一ユーザーの情報だと判別することができます。
<script>
//ユーザー情報の取得
firebase.auth().onAuthStateChanged(function(user) {
if(user) {
if(user.email == "<メールアドレス>") {
//データ書き込み
const db = firebase.firestore()
db.collection("<コレクション名>").doc(user.uid).set({
//以下は任意の項目
name: "sample",
address: "sample@test.com"
})
}
}
});
</script>
この書き方で良いのか不安な部分も多いのですが、、、
②で作成したユーザーはログイン状態になるため「firebase.auth().onAuthStateChanged」でログインユーザーの情報を取得し、該当ユーザーのデータをコレクションに追加しています。コレクション名や項目はご自身のケースに合わせて利用してください。
Cloud Firestoreを確認してデータが追加されていれば成功です。
Firebaseにユーザー情報を追加することが目的であればここまでの内容で完了です。
④1~3の処理をWordpressのユーザー登録時に実行する
今回はWordpressで新規ユーザーを登録した時に1~3の処理を実行したいので、最後にWordpressの「admin_print_footer_scripts」フックを利用して実装します。
WordPressの管理画面にjavascriptを適用するには、これらのフックを利用する必要があるんですよね。
実装は、下記コードをfunctions.phpに追加してください。
function firebase_user_create() {
global $hook_suffix;
if($hook_suffix == 'users.php') {
if(isset($_GET['id'])) {
$id = $_GET['id'];
$user = get_userdata($id);
echo '<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase.js"></script>';
echo '<script>
var config = {
apiKey: "<ウェブAPIキー>",
authDomain: "<プロジェクトID>.firebaseapp.com",
databaseURL: "https://<データベース名>.firebaseio.com",
projectId: "<プロジェクトID>",
storageBucket: "<Bucket名>.appspot.com",
messagingSenderId: "<送信者ID>"
};
firebase.initializeApp(config);
</script>';
echo '<script type="text/javascript">
var email = "' . $user->user_email . '";
var password = "' . $user->user_pass . '";
var useridtext;
//Firebaseのユーザーアカウントを作成
firebase.auth().createUserWithEmailAndPassword(email, password);
//ユーザー情報の取得
firebase.auth().onAuthStateChanged(function(user) {
if(user) {
if(user.email == "' . $user->user_email . '") {
//データ書き込み
const db = firebase.firestore()
db.collection("コレクション名").doc(user.uid).set({
name: "sample",
address: "sample@test.com"
})
}
}
});
</script>';
}
}
}
add_action('admin_print_footer_scripts', 'firebase_user_create');
ユーザー登録完了後はユーザー一覧ページに作成したユーザーのパラメータが挿入されるため、hook_suffixとパラメータを元にユーザー登録完了後のタイミングを判別して処理を実行しています。
この方法でWordpressのユーザー登録時にFirebase(Cloud Firestore)にもデータを自動で追加することができました。
ちなみに、本当は「user_register」フックでユーザー登録後のタイミングに処理を実行するのが理想だったのですが、こちらだとなぜかjavascriptがうまく実行されなかったのでこの実装方法になりました。
おわりに
以上、今回の記事ではWordPressのユーザー登録時にFirebaseへデータを追加する方法を紹介させていただきました。
Firebaseのデータベース操作方法はまだまだ情報が少ないため、すこしでも参考になれば幸いです。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。









