こちらの記事ではEC-CUBE4のヘッダーやフッターなどのパーツを、WordPressで呼び出す方法の解説をします。
EC-CUBE4やWordPressのインストールされている前提で解説させていただきます。
構築環境
・EC-CUBE
バージョン・・・4.2.1
インストールディレクトリ・・・https://hoge.com/
・WordPress
バージョン・・・6.7
インストールディレクトリ・・・https://hoge.com/blog/
「https://hoge.com/」はご自身の構築環境に合わせて、解説をご確認ください。
1.EC-CUBEでヘッダーなどの共通パーツの作成
① EC-CUBEのカート情報の確認
まずは下記のページにアクセスしてみてください。
https://hoge.com/block/cart
こちらのページはEC-CUBEのデフォルトで存在して、カートに入れた情報がフロント側で確認することができます。
②パーツの作成
ヘッダーやフッターなどの共通パーツを、上記ページのように作成していきます。
上記ページが作成されているファイルは下記から編集可能です。
src/Eccube/Controller/Block/CartController.php
「/src/Eccube/Controller/Block/」の中に、下記のようなWordPressに呼び出したいパーツを作成します。
- HeaderController.php
- FooterController.php
もしappフォルダで編集したい場合は、下記のディレクトリにアップしてください。
app/Customize/Controller/Block
appフォルダに構築の前提で進めさせていただきます。
カート情報が必要であれば、下記のようなコードになります。
<?php
namespace Customize\Controller\Block;
use Eccube\Controller\AbstractController;
use Eccube\Entity\Cart;
use Eccube\Service\CartService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class HeaderController extends AbstractController
{
protected $cartService;
public function __construct(
CartService $cartService
) {
$this->cartService = $cartService;
}
/**
* URLを変更したい場合は、下記を変更してください。
* @Route("/block/header", name="block_header", methods={"GET"})
*/
public function index(Request $request)
{
$Carts = $this->cartService->getCarts();
// 二重に実行され, 注文画面でのエラーハンドリングができないので
// ここではpurchaseFlowは実行しない
$totalQuantity = array_reduce($Carts, function ($total, $Cart) {
$total += $Cart->getTotalQuantity();
return $total;
}, 0);
$totalPrice = array_reduce($Carts, function ($total, $Cart) {
$total += $Cart->getTotalPrice();
return $total;
}, 0);
return $this->render('Block/header.twig', [
'totalQuantity' => $totalQuantity,
'totalPrice' => $totalPrice,
'Carts' => $Carts,
]);
}
}
上記コードはカート情報を持ってくるため、複雑なコードになっておりますが、最終行あたりのreturn $this->render
で下記のheader.twigを呼び出しています。
app/template/default/Block/header.twig
上記をアップロードしたら、下記のURLにアクセスしてみてください。
https://hoge.com/block/header
表示されていたら、成功です。
同様にFooterController.phpを作成していきます。
カート情報などが必要ないのであれば、下記のコードだけで十分です。
<?php
namespace Customize\Controller\Block;
use Eccube\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class FooterController extends AbstractController
{
/**
* @Route("/block/footer", name="block_footer", methods={"GET"})
*/
public function index()
{
return $this->render('Block/footer.twig');
}
}
下記ページにアクセスして、表示されていたら成功です。
https://hoge.com/block/footer
同様の手順で必要な共通パーツを作成していきます。
2.WordPressで呼び出し
作成したパーツのページを読み込みます。
PHPの場合
<?php
define('BASE_URL', 'https://hoge.com');
$header = file_get_contents(BASE_URL . '/block/header');
$footer = file_get_contents(BASE_URL . '/block/footer');
?>
<div id="header"><?php echo $header; ?></div>
<div id="footer"><?php echo $footer; ?></div>
JSの場合
<script>
window.addEventListener('DOMContentLoaded',()=>{
const headerContent = document.getElementById('header');
const footerContent = document.getElementById('footer');
// EC-CUBEからヘッダーの読み込み
if (headerContent) {
fetch("/block/header")
.then(res => res.text())
.then(html => headerContent.innerHTML = html)
.catch(err => console.error("ヘッダー取得失敗:", err));
}
// EC-CUBEからフッターの読み込み
if (footerContent) {
fetch("/block/footer")
.then(res => res.text())
.then(html => footerContent.innerHTML = html)
.catch(err => console.error("フッター取得失敗:", err));
}
})
</script>
<div id="header"></div>
<div id="footer"></div>
jsで共通パーツを呼び出していますので、headタグの中に直書きして、一番早く処理してもらうようにしましょう。
まとめ
EC-CUBE4とWordPressのパーツを共通化は、難しいものではありません。
是非、挑戦してみてください。
記事を読んで興味を持った方はぜひコチラ↓