エンジニアリング

wordpressのECプラグインWelcartを使って、クール便と通常便の商品を選択した場合クール便にすべてまとめて発送したいからプラグインの内部コードを調査してみた

Welcartすごいですよね、単なるBlog用のCMSだと思ってたwordpressをECサイト化させちゃうもんだからもうびっくりですよね・・・
ただ現仕様だと配送の部分が、こんな感じになっております

welcart

oh………..

同梱・・・・・したい・・・・クール便に全部まとめて1つで送りたいッ・・・・・

ということで調査してみました(verは今の最新:1.9.1)

前提

Welcart自体の配送設定は以下の通り

スクリーンショット 2017-02-04 20.32.53
スクリーンショット 2017-02-04 20.41.39

送料を、通常とクールで定義

スクリーンショット 2017-02-04 20.33.04

こんな感じで、送料を2つ定義して送料固定をしないで商品ごとに使い分けるような感じです。

送料はどこで計算している?

/usc-e-shop/classes/usceshop.class.php
[php]
//このメソッドが送料計算メソッド
function getShippingCharge( $pref, $cart = array(), $entry = array() ) {

if( empty($cart) )
$cart = $this->cart->get_cart();

if( empty($entry) )
$entry = $this->cart->get_entry();

〜〜〜中略〜〜〜

foreach ( $cart as $rows ) {

//ここで、送料が複数無い商品の送料を計算している $charge が送料の金額

if( -1 == $fixed_charge_id ){
//商品送料ID
$s_charge_id = $this->getItemShippingCharge($rows[‘post_id’]);
//商品送料index
$s_charge_index = $this->get_shipping_charge_index($s_charge_id);
//$charge = isset($this->options[‘shipping_charge’][$s_charge_index][‘value’][$pref]) ? $this->options[‘shipping_charge’][$s_charge_index][‘value’][$pref] : 0;
$charge = isset($this->options[‘shipping_charge’][$s_charge_index][$country][$pref]) ? $this->options[‘shipping_charge’][$s_charge_index][$country][$pref] : 0;
}else{

$s_charge_index = $this->get_shipping_charge_index($fixed_charge_id);
//$charge = isset($this->options[‘shipping_charge’][$s_charge_index][‘value’][$pref]) ? $this->options[‘shipping_charge’][$s_charge_index][‘value’][$pref] : 0;
$charge = isset($this->options[‘shipping_charge’][$s_charge_index][$country][$pref]) ? $this->options[‘shipping_charge’][$s_charge_index][$country][$pref] : 0;
}

〜〜〜中略〜〜〜
//複数の送料があった場合このロジックで計算がされる
if( count($charges) > 0 ){
rsort($charges);
//ここでフォーラムで記載されている通り、IDの若い(上の方に位置する)配送方法が優先的に適用される状態になる
//$chargesの配列の中に array[0]710 array920 みたいな値が入っている状態
$max_charge = $charges[0];
$charge = $max_charge + array_sum($individual_charges);
}else{
$charge = array_sum($individual_charges);
}
$charge = apply_filters(‘usces_filter_getShippingCharge’, $charge, $cart, $entry);
[/php]

つまり、送料計算するロジックの所で若いIDを取らず送料配列で送料が大きい方(クール便の方が高いので)を比較すればクール便と通常便がある時にクール便が優先されそうだ!

一応最下段でフックが提供されているのでfuctionの記載で次回対応してみることにする

最後に・・・・

php・・・本業じゃないのでコード読むの下手くそです・・・