Woocommerceを日本語対応にする

ども、オウタです。

当社ではWordpressでのメディア構築に数多く携わらせていただいておりますが、最近増えてきているのが自社でのECメディアのご要望です。
WordpressでECサイトというと、日本語対応しているものが少なく、公式に日本語対応とうたっているもがWelcartくらいです。
当社でもWelcartの導入経験もありますが、正直、使い勝手もあまり良くなく、バグも多い印象です。

そこで、当社で積極的に導入を進めているのが「Woocommerce」です。

「Woocommerce」は、Wordpressの開発元であるAutomattic社が2015年春に開発会社を買収し、Wordpressの公式ECプラグインとなっています。
ダウンロード数は750万を誇り、WooCommerceはすべてのWordPressプラグインの中でもトップ10に入っています。
そんなWoocommerceですが、日本ではまだまだ導入例が少ないようで、日本語化プラグインなどもあまり充実していません(「Woocommerce for Japan」というプラグインがあるのですが、あまり機能していないかんじ)。
そこで、Woocommerceの日本語化のポイントを解説します。

今回は、住所表示関連についてです。

1. チェックアウト時の住所情報入力フォームが日本語の並びではない

functions.phpに以下のような記述をすることによって、フォームの順序を日本語に対応させられます。

//functions.php
/**チェックアウト時の住所の日本語対応**/
add_filter('woocommerce_checkout_fields','reorder_woo_fields');

function reorder_woo_fields($fields) {
$fields2['billing']['billing_last_name'] = $fields['billing']['billing_last_name'];
$fields2['billing']['billing_first_name'] = $fields['billing']['billing_first_name'];
$fields2['billing']['billing_postcode'] = $fields['billing']['billing_postcode'];
$fields2['billing']['billing_state'] = $fields['billing']['billing_state'];
$fields2['billing']['billing_city'] = $fields['billing']['billing_city'];
$fields2['billing']['billing_address_1'] = $fields['billing']['billing_address_1'];
$fields2['billing']['billing_address_2'] = $fields['billing']['billing_address_2'];
$fields2['billing']['billing_phone'] = $fields['billing']['billing_phone'];
$fields2['billing']['billing_email'] = $fields['billing']['billing_email'];
//これより以下は変更禁止
$fields2['shipping']['shipping_last_name'] = $fields['shipping']['shipping_last_name'];
$fields2['shipping']['shipping_first_name'] = $fields['shipping']['shipping_first_name'];
$fields2['shipping']['shipping_postcode'] = $fields['shipping']['shipping_postcode'];
$fields2['shipping']['shipping_state'] = $fields['shipping']['shipping_state'];
$fields2['shipping']['shipping_city'] = $fields['shipping']['shipping_city'];
$fields2['shipping']['shipping_address_1'] = $fields['shipping']['shipping_address_1'];
$fields2['shipping']['shipping_address_2'] = $fields['shipping']['shipping_address_2'];
$fields2['account'] = $fields['account'];
$fields2['order'] = $fields['order'];
return $fields2;
}

2. 管理画面の注文一覧の配送先住所表記が英語の順番になっている

/** 注文管理画面一覧の配送先を日本語対応 **/
add_filter('woocommerce_shipping_address_map_url_parts', 'shipping_address_map_url_parts_jp');

function shipping_address_map_url_parts_jp($address) {
    $address2 = array(
        'postcode'      => $address['postcode'],
        'state'         => replace_jpstatescode2statename($address['state']),
        'city'          => $address['city'],
        'address_1'     => $address['address_1'],
        'address_2'     => $address['address_2'],  
        'country'       => $address['country']
    );
    return $address2;
}

注文受け付けメールなどに記載される配送先住所と請求先住所が英語の順番になっている

/** 配送先住所の表示を日本語に対応 **/
add_filter('woocommerce_order_formatted_shipping_address', 'order_formatted_shipping_address_jp');

function order_formatted_shipping_address_jp($address) {
    $wcc = new WC_Countries();
    //var_dump(['JP']);
    $address2 = array(
            'last_name'     => $address['last_name'],
            'first_name'    => $address['first_name'],
            'postcode'      => $address['postcode'],
            'state'         => replace_jpstatescode2statename($address['state']),
            'city'          => $address['city'],
            'company'       => $address['company'],
            'address_1'     => $address['address_1'],
            'address_2'     => $address['address_2'],
            'country'       => $address['country'],
    );   
    
    return $address2;
}


/** 配送先住所の表示を日本語に対応 **/
add_filter('woocommerce_order_formatted_billing_address', 'order_formatted_billing_address_jp');

function order_formatted_billing_address_jp($address) {
    $address2 = array(
            'last_name'     => $address['last_name'],
            'first_name'    => $address['first_name'],
            'postcode'      => $address['postcode'],
            'state'         => replace_jpstatescode2statename($address['state']),
            'city'          => $address['city'],
            'company'       => $address['company'],
            'address_1'     => $address['address_1'],
            'address_2'     => $address['address_2'],
            'country'       => $address['country'],
    );   
    
    return $address2;
}

/** 住所の表示順を日本語に対応 **/
add_filter( 'woocommerce_localisation_address_formats', 'localisation_address_formats_jp');

function localisation_address_formats_jp($formats) {
    $formats['default'] = "〒{postcode} {state}{city}{address_1}{address_2}{company}  {last_name} {first_name}";
    
    return $formats;
}

/** state_codeを都道府県名に置換 **/
function replace_jpstatescode2statename($code) {
    global $states;
    foreach($states['JP'] as $key => $state) {
        if ($key == $code) {
            return $state;
        }
    }
    
}

こんなかんじですかね。

これで大体日本語表記に対応させられます。

通貨の表示などはまた今度。

関連記事

  1. 2017-8-20

    WordPressで記事一覧で日付を出力するときにはthe_date()は使わない方が良い理由

    久々の投稿です。 ちょっとしたことなんですが、Wordpressで記事一覧などを作成するときに…

ピックアップ記事

  1. Wordpressでサイト制作をしていると、 サイドバーなどにプラグインの機能などを埋め込…
  2. お疲れ様です。 Wordpressのバージョンアップがかなり頻繁に実施されていて、だいぶついて行け…
  3. しばらくやってなかったんですが、Wordpressのテンプレートを独自でゼロから作る場合、 アイキ…

おすすめ記事

  1. 久々の投稿です。 ちょっとしたことなんですが、Wordpressで記事一覧などを作成するときに…
  2. ども、オウタです。 当社ではWordpressでのメディア構築に数多く携わらせていただいており…
  3. ども。オウタです。 WordPressで投稿した記事を、投稿時に自動でFBページのフィードに流…

アーカイブ

ページ上部へ戻る