WordPressとLaravelの連携

Laravelで作成したWebサイトと後から作成したWordpressサイトを共存、連携しようとして試したこと、確認できたことを書いてみました。 共に、さくらインターネットのスタンダードプランに導入したサイトで、連携のために試したのは、以下の内容です。
  • (1)Users情報を共有
  • (2)LaravelコントローラーからWordPress固定ページへのリダイレクト
それによって目指したのは、以下のような、それぞれの利点を生かしたサイト作りで、特にWordPressのプラグインによる拡張機能をLaravel側でも利用することです。
    • (1)Laravel
        • 動的処理、動的ページの作成
    • (2)WordPress
        • 静的ページ作成
        • プラグインの利用
            • ①問い合わせ
            • ②会員管理
            • ③決済サービスとの連携
PHP/Laravel体験講座

確認できたこと、実現できたこと

最終的に目指したいのは、LaravelのWebサービスとWordPressの決済機能を統合した、ECサイト構築なのですが、現時点で実現、確認できたことは、以下の内容です。
  • (1)さくらインターネットでのLaravelとWordPressの環境構築
  • (2)WordPressでの会員管理
      • Wp-membersプライン利用した画面等の作成
  • (3)ユーザ情報の共有
      • WPユーザをLaraver側に登録するためのプラグイン作成
  • (4)Laravel側コントローラーから、WordPess固定ページへのリダイレクト

さくらインターネットでの環境構築

Laravel の導入

ローカル環境で作成したLaravelアプリケーションをさくらインターネットで公開することは、思いのほか比較的スムーズでした。インストールしなくても、単にコピーするだけで動作したからです。もちろん、データベースの作成、テーブルのコピーは必要ですが、予め、さくらインターネットの説明や、MySQLの操作を確認しておくことで、問題なく進められました。 多少戸惑ったことは、FFFTPでのアップロード途中で停止してしまったこと、シンボリックリンクの設定くらいでした。 FTPについては、FFFTPではなく、WinSCPを使うことで解決しました。 また、シンボリックリンクのほうは、SSHとしてPuttyを使って設定できました。 さくらインターネット(スタンダードプラン)では、/home/ドメイン名フォルダー下に、Laravel等のフォルダーを設けてファイルをアップロードすることになります。また、/home/ドメイン名フォルダー/wwwがドキュメントルートなので、ここにシンボリックリンクを貼りました。そのため、wwwフォルダーに移動して、下記コマンドを実行しました。
ls -s /home /ドメイン名/フォルダー名 リンク名

<Laravelで作成したWebサービス>

Laravelで構築したのは、つくばや東京エリアのIT関係案件等の入札案件の紹介サイトです。 <Laraveで構築したサイト:「入札案件情報Share&Manage」> (1)入札案件の日別の登録件数 (2)入札案件の新着情報一覧

WordPressの導入

Wordpressについては、さくらインターネットのガイダンスに沿って、クイックインストールを実行しました。その際、WordPressを複数インストールすることを考慮して、ルートの下にフォルダを設け、また、テーブル接頭辞は、wp01としました。さくらインターネット環境に合わせ、wp-config.phpを設定することで、Worpressは問題なく動作し、Laravelとの共存環境ができました。 ただ、ローカルで作成したWordPressサイトのデータ移行の段階で、いろいろ躓いたのですが、All-in-one Maigrationが使えるようになってからは、ローカルデータの移行も容易になりました。 All-in-one Migrationを使えるようにするためのポイントは、以下の通り。
    • (1)phpバージョンを合わせること
    •    ・ phpバージョンが違うとインポートで停止する
        • ・ローカル側Laravelのphpバージョンアップ
    • (2)アップロード容量を増やす
        • ・拡張用のプラグインAll-in-One WP Migration File Extensionで対応
        • (512MBまで無料で使用可)

WordPressでの会員管理

WordPress側で「会員管理」、「問い合わせ」機能を実装し、それをLaravel側で利用できるようにしてみました。

WordPressで会員管理

会員管理を行うためのプラグインは、いろいろあるようですが、ここでは、比較的簡単そうなWPーMembersを使ってみました。

(1)Wordpressにプラグイン導入

WP-MembersプラグインはVer3.3.6、WordPressはVer5.5.1、使用しているテーマはCocconです。 WP-Membersをインストールして、有効化してした後の設定で、「WP-Membersオプション」「フィールド」「ダイアログ」「メール」などを設定します。 「ダイアログ」「メール」は、ダイアログ画面やメール文の等の表記の設定で、デフォールトでは英語表記なので、必要に応じて日本語に修正します。 「フィールド」では、予め用意された登録の入力項目の選択、必須か否かなどの設定の他、項目の追加ができます。 まずは、予め用意された中から、最小限を設定しました。 <WP-Members 設定画面>   「フィールド」では、登録時の入力項目などを設定します。  

(2)会員管理ページ作成

1)新規登録 固定ページで新規登録画面を作成します。 ショートコード、[wpmem_form_register]をページに、直接書き込むか、または、で表示されるショートコードを選択することもできます。 作成した固定ページを公開してから、WP-Membersの「WP-Membersオプション」設定画面で、固定ページの「新規登録」として作成したページを選択します。 これにより、下記のよう様な画面が出来上がります。 2)ログイン画面他 ログイン画面、会員profile画面についても、新規登録画面と同様の要領で、固定ページを作成しておくことで、「wp-memberオプション」設定で、リンク設定ができます。

<ログイン画面>

3)登録情報更新画面等の作成 登録情報更新、パスワード再発行など、同様の要領で、ぞれぞれに応じたショートコードを張り付けることで画面を作成できるので簡単です。  

Lravelとユーザ情報の共有

Wordpressで作成した会員管理機能をLaravel側で利用するため、WordPress側のUsers情報をLaravel側のusersテーブルに反映させます。 このようなプラグインは見当たらなかったので、自作してみました。

(1)独自プラグインの作成

WordPressのユーザ情報をLaravelに反映するための自作のプラグインです。
プラグインの基本条件
WordPressCodeXに従って、wp-content\pluginsフォルダー内に、自作プラグインを置くフォルダーを作成して、フォルダー名と同名のphpファイルを作成すれば、これがプラインとなります。そして、phpファイルに以下の標準プラグイン情報、ライセンスを記述することで、プラインとして認識されました。
標準プラグイン情報
/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: (ライセンス名の「スラッグ」 例: GPL2)
*/
ライセンス
/*  Copyright 作成年 プラグイン作者名 (email : プラグイン作者のメールアドレス)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License, version 2, as
	published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
これで、wordpress側でプラグインをインストールし、有効化できるようになります。
Laravel側DBのuserテーブルへの書き込み
自作したPHPの処理は、以下の内容です。 (1)処理実行のためのAction Hook Wp-MembersのAction Hooksに関するDocumentationをもとに、「wpmem-pre-register-data」を利用した以下のようなPHPコードにより、自作のfunctionのなかで、新規登録画面で入力したuser情報を、引数$fieldsで取得できます。
・add_action('wpmem-pre-register-data’ , 自作のfunction名($fields));

wpmem-pre-register-dataの解説ページ参照)

ちなみに、それぞれのテーブル名、主な項目名は、以下の通りです。
  • (1)WordPress
    • ・テーブル名:接頭辞_usersテーブル
    • ・項目名:user-login、user-pass、user-email、・・・
  • (2)Laravel
    • ・テーブル名:users
    • ・項目名:name、password、email、・・・
  (2)パスワードの暗号化 $fields[’user_pass']で取得できるパスワードを、Laraver側に合わせて、bcryptで暗号化しました。
$pass=$fields['user_pass']; $pass =password_hash($pass,PASSWORD_BCRYPT);
  (3)PDOによる、DBへの書き込み phpコードはこんな感じです。
$sql=$pdo->prepare('INSERT INTO users (name,email,password) value(:name:email,:pass);$sql->bindValue(':name',$name);$sql->bindVale(':email',$email); $sql->bidValue(':pass,$pass); $sql->execute;

Laravelへの反映テスト

WordPressの新規登録画面で登録したユーザ情報が、Laravelのusersテーブルに書き込まれることが確認できました。 また、Wordpress側のwp-membersでは、登録時に、パスワードがメール通知されるのですが、このパスワードにより、Laravel側でも、Authを使ったlogin画面からログインができました。

Laravel側のControllerからのリダイレクト

最後に、Laravel側のControllerから、WP固定ページへのリダイレクトです。

return redirect()->away($url);

 

この$urlにWordpressの固定ページを指定することで、Wordpress側の会員管理画面のほか、問い合わせ画面等にも、リダイレクトできることが確認できました。

なお、問い合わせ画面は、定番のプラグイン(contact form7)により作成したものです。

決済サービスの利用

Wordpressのプラグインによる決済機能を利用したECサイトの構築については、これからですが、Stripeを試してみる予定です。  

まとめ

さくらインターネットにLaravelとWordPressの共存環境を構築しました。さらに、ユーザ情報の共有、相互のページへのリンクも試してみました。それぞれの利点を生かすことで、サイト作成が楽になりそうです。今後、決済サービスについても試してみる予定です。  

コメント

タイトルとURLをコピーしました