Fatal Error: Unexpected BLOG

主に自分用の備忘録として

【EC-CUBE】Googleアナリティクスのコンバージョンタグを設置する

タイトル通り、GoogleアナリティクスのコンバージョンタグをEC-CUBEの購入完了画面へ設置する方法です。
以下のサイトを参考にさせて頂きました。

EC-CUBEのバージョンは2.13です。

デフォルトだと注文情報は完了画面でunsetされてる

LC_Page_Shopping_Complete.phpの51行目あたり

<?php
    public function process()
    {
        parent::process();
        $this->action();
        $this->sendResponse();
        // プラグインなどで order_id を取得する場合があるため,  ここで unset する
        unset($_SESSION['order_id']);
    }

このままだと注文情報をテンプレートへ渡せず、コンバージョンタグが設定出来ないので、変更します。

コンバージョンタグに必要な情報をテンプレートへ渡せるようにする

コンバージョンの測定には注文情報が必要なので、unset前にページオブジェクトのフィールドへ格納します。
process()メソッド内でorder_idをunsetする前にaction()メソッドが走るので、そちらでデータを取得します。

<?php
    public function action()
    {
        $this->arrInfo = SC_Helper_DB_Ex::sfGetBasisData();

        //コンバージョンタグ対応用
        if (is_numeric($_SESSION['order_id'])) {
            $objPurchase = new SC_Helper_Purchase_Ex();
            $this->arrOrder = $objPurchase->getOrder($_SESSION['order_id']);
            $this->arrOrderDetail = $objPurchase->getOrderDetail($_SESSION['order_id']);
        }
    }

これでテンプレート側で$arrOrder及び$arrOrderDetailへアクセスすれば注文情報を取得出来ます。

テンプレートへコンバージョンタグを設置

上記でテンプレートへ渡した注文情報をテンプレート側でコンバージョンタグ内へ展開します。
site_frame.tplの足元へ、ページクラス名による条件分岐で設置します。

    <!--GA-->
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-XXXXXXXX-X', 'auto');
        ga('require', 'ecommerce', 'ecommerce.js');
        ga('send', 'pageview');
    </script>
    <!--//GA-->
    <!--{* Google conversion tag *}-->
    <!--{if $tpl_page_class_name eq "LC_Page_Shopping_Complete" && count($arrOrder) > 0 && count($arrOrderDetail) > 0}-->
    <script>
        ga('ecommerce:addTransaction', {
            id: '<!--{$arrOrder.order_id|h}-->', // Transaction ID - this is normally generated by your system.
            affiliation: '<!--{$arrSiteInfo.shop_name}-->', // Affiliation or store name
            revenue: '<!--{$arrOrder.payment_total|h}-->', // Grand Total
            shipping: '<!--{$arrOrder.deliv_fee|h}-->' , // Shipping cost
            tax: '<!--{$arrOrder.tax|h}-->' // Tax.
        });
        <!--{foreach from=$arrOrderDetail item=orderDetail name=order_detail}-->
        ga('ecommerce:addItem', {
            id: '<!--{$arrOrder.order_id|h}-->', // Transaction ID.
            sku: '<!--{$orderDetail.product_code|h}-->', // SKU/code.
            name: '<!--{$orderDetail.product_name|h}-->', // Product name.
            price: '<!--{$orderDetail.price|h}-->', // Unit price.
            quantity: '<!--{$orderDetail.quantity|h}-->' // Quantity.
        });
        <!--{/foreach}-->
        ga('ecommerce:send');
    </script>
    <!--{/if}-->
    <!--{* //Google conversion tag *}-->

これでいいはず。