YAKを少しカスタマイズ

前にも書きましたが、当社のもうひとつのサイトfujiで使用しているWordpressのプラグイン、yak-for-wordpressを主に日本国内で使用する場合の最低限のカスタマイズ。

といってもそんなにいじらなくても使えます。yak-for-wordpressはWordpress上でショッピングカートシステムを構築するためのプラグインです。

まず日本語がおかしい。日本語の翻訳をしてるのはどうやら日本人じゃないんじゃないかと想像しています。
直そうかと思ってja.poファイルを開いたんですが、ふとen.poファイルと見比べてみると行数が倍あります。そこでen.poファイルをコピーしてそれを翻訳してみました。と、なにかおかしい。管理画面の英文なんですが、訳しても日本語が表示されないんです。そこでいろいろファイルを開いて見てみると、管理画面の英文はただのプレーンテキストになっていてgettextの形になってませんでした。うーん、これはそのうちやるぞという作者の意思表示なのか、はたまた忘れているのか分かりませんが、とりあえずこのあたりはそのままにしておきました。

次に桁区切りの問題です。これは前にも書いたQuick.Cartでも苦労しました。ドル表記に合わせているのでしょうが、とにかくあらゆる金額の表示に.00を付け足すんです。例えば商品価格を1000円と設定しても、画面上に表示される金額が常に1000.00円になります。これは本当に苦労しました。しかしyak-for-wordpressはそこはよく考えられていて、管理画面から設定できます。管理画面でMoney FormatをNo decimal placesにすると.00は消えます。しかし自動送信の注文確認メールを見てみるとここにいましたよ、.00が。商品価格や配送料の最後に.00が付いていました。

これを表示させないためyak-payments.phpの最後の方の362行目あたり

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $detail = __('Title', 'yak') . ": %s¥n" .
                  __('Quantity', 'yak') . ": %d¥n" .
                  __('Price', 'yak') . ": %8.2f¥n" .
                  __('Total' , 'yak') . ": %8.2f¥n¥n";
 
        $detailmsg = '';
        foreach ($results as $result) {
            $price = $result->price;
            $qty = $result->quantity;
            $totalprice += ($price * $qty);
            $itemprice = $price * $qty;
            $totalquantity += $qty;
            $detailmsg = $detailmsg . sprintf($detail, $result->itemname, $qty, $price, $itemprice);
        }
 
        $detailmsg = $detailmsg . __('Shipping costs', 'yak') . sprintf(': % 8.2f', $shipping) . "¥n";

ここの8.2が怪しいと思い

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $detail = __('Title', 'yak') . ": %s¥n" .
                  __('Quantity', 'yak') . ": %d¥n" .
                  __('Price', 'yak') . ": %0.0f¥n" .
                  __('Total' , 'yak') . ": %0.0f¥n¥n";
 
        $detailmsg = '';
        foreach ($results as $result) {
            $price = $result->price;
            $qty = $result->quantity;
            $totalprice += ($price * $qty);
            $itemprice = $price * $qty;
            $totalquantity += $qty;
            $detailmsg = $detailmsg . sprintf($detail, $result->itemname, $qty, $price, $itemprice);
        }
 
        $detailmsg = $detailmsg . __('Shipping costs', 'yak') . sprintf(': % 0.0f', $shipping) . "¥n";

としてみたら.00は表示されなくなりました。僕はPHPはまったく分からないのでこれが正しいのかどうかちょっと自信が無いのですが、今のところ問題は無さそうです。

そして住所表記の問題です。こういうカートシステムではお客様に配送先等の住所を入力して頂く訳ですが、これもやはり海外仕様のためか、入力順が逆になってます。管理画面でフォームの表示順を変更できたらいいんですが、yak-for-wordpressにはその機能はありません。テンプレートをいじってフォームの表示順は変更したんですが、注文内容の確認画面と自動送信の注文確認メールに表示される住所はやっぱりそのままでした。

そこでyak-for-wordpress.phpの2238行目あたり

1
2
3
4
5
6
7
8
9
10
11
12
        $caddress['email'] = $_POST[$type . '_email'];
        $caddress['recipientname'] = $_POST[$type . '_recipientname'];
        $caddress['phone'] = $_POST[$type . '_phone'];
        $caddress['addr1'] = $_POST[$type . '_addr1'];
        $caddress['addr2'] = $_POST[$type . '_addr2'];
        $caddress['suburb'] = $_POST[$type . '_suburb'];
        $caddress['city'] = $_POST[$type . '_city'];
        $caddress['region'] = $_POST[$type . '_region'];
        $caddress['postcode'] = $_POST[$type . '_postcode'];
 
        $cty = $_POST[$type . '_country'];
        $caddress['country'] = $countries[$cty];

この部分の順序を変更するとうまくいきました。ただし先頭はメールアドレスにしておかないと駄目みたいです。自動送信の注文確認メールが送信されなくなりますので。

それと最後のcountryなんですが、当店は国内しか配送しないので余計な物なんですが、これを消しちゃうと配送料の計算がおかしくなってうまくいきませんでした。注文内容の確認画面と自動送信の注文確認メールにJapanと表示されちゃいますが、そのまま使ってます。

これだけいじれば最低限日本国内で使用出来ると思います。

ところで、yak-for-wordpressは本当にシンプルなんでこういう時は手間が掛からずいいんですが、その反面かえって面倒くさいところも有ります。例えば商品のサイズやカラーはカテゴリーを利用しています。これは本来のカテゴリーと違って出来れば見せたくない物なんですが、これを隠す方が手間が掛かりました。まだ完全に隠れていないかもしれませんが。

最後に日本語ファイルを置いておきますのでyak-for-wordpressを使ってみたい方はご利用ください。

yak-ja.zip