Welcartで商品の配送方法を取得する方法

Welcartで商品の配送方法を取得する方法

WelcartでECサイトを構築している場合に、配送方法によって表示を変えたいケースって結構あるのではないでしょうか。

そこで今回は、商品詳細や商品一覧で商品に設定されている配送方法を取得したり、現在カート内に入っている商品の配送方法を取得する方法をご紹介いたします。

Welcartで商品の配送方法を取得する方法

商品詳細や商品一覧で配送方法を取得する方法

まずは、商品詳細・商品一覧ページで、商品に設定されている配送方法を取得する方法です。

functions.phpに以下を追加します。

function get_delivery_method() {
  global $post, $usces;
  return $usces->getItemDeliveryMethod($post->ID);
}

商品詳細や商品一覧のループ内で、以下のようにget_delivery_method()を実行します。

$delivmethod = get_delivery_method();

以下は$delivmethodをvar_dumpした結果です。$delivmethodには、配送方法のIDが入りますので、後はこれを使ってゴニョゴニョすればOKですね。(IDだけどstring型なので注意)

array(1) { [0]=> string(1) "1" }

例えば、以下のように条件分岐させることができます。

<?php if(in_array('1', $delivmethod)): ?>
  ID:1 の配送方法が設定されている場合の出力
<?php else: ?>
  ID:1 が含まれない場合の出力
<?php endif; ?>

ちなみに、複数箇所では使わないので関数化せずにテンプレート内で完結させたい、という場合は、以下のようにすれば配送方法を取得できます。

<?php 
  global $usces;
  $post_id = get_the_ID();
  $delivmethod = $usces->getItemDeliveryMethod($post_id);
?>

カート内に入っている商品の配送方法を取得する方法

続いて、カート内に入っている商品の配送方法を取得する方法です。

まず、functions.phpに以下を追加します。

function get_delivery_method_in_cart() {
  global $usces;
  $cart = $usces->cart->get_cart();
  $delivmethod_cart = [];

  for($i=0; $i<count($cart); $i++) { 
    $cart_row = $cart[$i];
    $cart_post_id = $cart_row['post_id'];
    $delivmethod_cart[] = $usces->getItemDeliveryMethod($cart_post_id);
  }
  return $delivmethod_cart;
}

カート内の配送方法を取得したい箇所で、get_delivery_method_in_cart()を実行します。

$delivmethod_in_cart = get_delivery_method_in_cart();

以下は$delivmethod_in_cartをvar_dumpした結果です。

array(1) { [0]=> array(1) { [0]=> string(1) "1" } }

これを使って条件分岐させるには、以下のように記述します。

<?php if (in_array(['1'], $delivmethod_in_cart)) : ?>
  ID:1 の配送方法が設定されている場合の出力
<?php else: ?>
  ID:1 が含まれない場合の出力
<?php endif; ?>

あとがき

カート内の配送方法を使うケースは稀かもですね。「同じ配送方法の商品しか一緒に購入できないようにしたい」という要望をいただいた際に、カート内の商品と配送方法が異なる場合にカートに入れるボタンを無効化しました。

配送方法を取得してゴニョゴニョしたいという場合は、ぜひ参考にしていただければ幸いです。

番外編

ちなみに、カート内に入っている商品のカテゴリーを取得したい場合は、functions.phpに以下を追加することで取得可能です。

function usces_get_category() {
  global $usces;
  $cart = $usces->cart->get_cart();
  $category = [];

  for($i=0; $i<count($cart); $i++) { 
    $cart_row = $cart[$i];
    $cart_post_id = $cart_row['post_id'];
    $category[] = get_the_terms($cart_post_id, 'category');
  }
  return $category;
}

usces_get_category()を実行すると、各商品のカテゴリー情報が配列で返ってきます。

array(2) {
  [0]=> array(2) {
    [0]=> object(WP_Term)#8195 (10) {
      ["term_id"]=> int(2) 
      ["name"]=> string(6) "商品" 
      ["slug"]=> string(4) "item" 
      ["term_group"]=> int(0) 
      ["term_taxonomy_id"]=> int(2) 
      ["taxonomy"]=> string(8) "category" 
      ["description"]=> string(0) "" 
      ["parent"]=> int(0) 
      ["count"]=> int(2) 
      ["filter"]=> string(3) "raw" } 
    [1]=> object(WP_Term)#8196 (10) {
      ["term_id"]=> int(4) 
      ["name"]=> string(9) "新商品" 
      ["slug"]=> string(7) "itemnew" 
      ["term_group"]=> int(0) 
      ["term_taxonomy_id"]=> int(4) 
      ["taxonomy"]=> string(8) "category" 
      ["description"]=> string(0) "" 
      ["parent"]=> int(2) 
      ["count"]=> int(1) 
      ["filter"]=> string(3) "raw" 
    }
  }
  [1]=> array(2) { 
    [0]=> object(WP_Term)#8202 (10) { 
      ["term_id"]=> int(3) 
      ["name"]=> string(15) "お勧め商品" 
      ["slug"]=> string(8) "itemreco" 
      ["term_group"]=> int(0) 
      ["term_taxonomy_id"]=> int(3) 
      ["taxonomy"]=> string(8) "category" 
      ["description"]=> string(0) "" 
      ["parent"]=> int(2) 
      ["count"]=> int(1) 
      ["filter"]=> string(3) "raw" 
    }
    [1]=> object(WP_Term)#8200 (10) { 
      ["term_id"]=> int(2) 
      ["name"]=> string(6) "商品" 
      ["slug"]=> string(4) "item" 
      ["term_group"]=> int(0) 
      ["term_taxonomy_id"]=> int(2) 
      ["taxonomy"]=> string(8) "category" 
      ["description"]=> string(0) "" 
      ["parent"]=> int(0) 
      ["count"]=> int(2) 
      ["filter"]=> string(3) "raw" 
    } 
  } 
}

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です