ECサイトにブログ追加(EC-CUBE3とWordPressの連携)

2019/09/11


EC-CUBE3とWordPressの連携を行いたい場合の設定について纏めました。
EC-CUBEをメインに構築している環境を対象にしています。

共存について

  1. 「.htaccess」の設定

EC-CUBE側でWordPressの内容を読み込む場合

  1. WPの読み込み
  2. 内容取得
  3. twigファイルに渡して表示
  4. 例:カスタム投稿「news」を10件表示する

WordPress側でEC-CUBEの内容を読み込む場合

  1. EC-CUBEの読み込み
  2. 内容取得
  3. ログイン情報周りの取得
  4. 例:最新の商品情報を3件表示する

共存について

「.htaccess」の設定

EC-CUBEのフレームワークが割と強めなため、普通に「wordpress」というフォルダを作ってそこにWordPressを置いても動きません。
共存のために、EC-CUBE側の「.htaccess」で「wordpress」フォルダ以下をEC-CUBEの直接管理下から外す作業が必要です。
以下のように変更します。

これでEC-CUBE、WordPress、どちらも動くようになります。

EC-CUBE側でWordPressの内容を読み込む場合

WPの読み込み

WPは、フォルダの外から利用することも想定して便利な作りになっています。
「wordpress」フォルダの直下にある「wp-load.php」を読み込めば良いだけです。

変数取得

読み込みが完了すれば、WPの関数を自由に使えるので、投稿内容などを取得してカスタマイズします。
例えば、最新の投稿5件を取得するには以下でOKです。

twigファイルに渡して表示

EC-CUBEは表示部分はtwigファイルで行っていますので、レンダリング時に変数を渡してあげる必要があります。

例:カスタム投稿「news」を5件表示する

実際は、『カスタム投稿「news」を5件表示するブロック』を作って対応することになると思います。

WordPress側でEC-CUBEの内容を読み込む場合

EC-CUBEの読み込み

EC-CUBEもフォルダ外から読み込めるようにはなっています。
しかし、あくまでもフォルダ外に「EC-CUBEのトップ」を置くため、と理解しています。
ですので、読み込んだから自由自在に関数を使えるかというとそうでもない気がしています(わたしの認識不足のため、実際は出来るかもしれませんが・・・)。


この最後の「boot();」の部分を「run();」に変えればEC-CUBEの関数を自由に使えるのですが、「run();」にするとレンダリングまで走ってしまい、EC-CUBE側の画面表示がされてしまうので悩ましい部分です。
でも「boot();」の実行だけでもEC-CUBE側の色々な情報を取得できます。

内容取得

例えばカテゴリーの取得。

例えばカート内の商品の取得。

ログイン情報周りの取得

大体のところは思った通りに出来たのですが、ログイン判定周りがだいぶ苦戦してしまいました。
上記で示した「boot();」で自由に関数が使えない、というのはこのログイン周りです。
ログインしているかどうか、ログインしているユーザー情報、これらが取得できませんでした。

上記の処理を実行するとエラーが出てしまいます。

エラー内容から推察するにEC-CUBEの「firewalls」の設定が問題なのだと思うのですが、いろいろ試しましたがダメでした。
ログイン情報取得に必要なトークンがそもそも取得できていません。
EC-CUBEの外側への引き渡しが制限されているものなのかもしれません。

以下の方法でなんとか対応は出来るようにしましたが、もっとスマートな方法がある気がします。

対応方法

EC-CUBE側でログインしたら、その情報をセッションに格納し、WP側でそのセッションを取得する、というやり方で対応しました。

ちなみに、WPでセッションを利用するには以下のようにします。

例:最新の商品情報を3件表示する

南本貴之