2017-11-03 10 views
1

ここでは、私はWoocommerceの問題を抱えています。 この問題の主題がここの解決策であるかどうかはわかりませんが、達成したいことを説明してください。Woocommerceの注文に追加の隠し情報を添付する

私はこの機能を作成しました。この機能は、あるカテゴリ内のカート内の商品の総合計額を小計に合計します。その小計に基づいて、ユーザーは何人のユーロを取得するのかを示すメッセージを受け取ります。

## Category based sum ## 
function cat_cart_sum($cat_id) { 
    if (! is_page('winkelmand')) { 
     return; 
    } 
    $cat_count = 0; 
    // Iterating through each cart item 
    foreach(WC()->cart->get_cart() as $cart_item) 
     if(has_term($cat_id, 'product_cat', $cart_item['product_id'])) { 
      $regularprice = $cart_item['data']->get_price(); 
      $price = $regularprice * $cart_item['quantity']; 
      $cat_count += $price; 
     } 
    if ($cat_count >= 40 && $cat_count <= 100) { 
     wc_add_notice('U krijgt bij het afhalen €10 gratis vuurwerk!', 'notice'); 
     } elseif ($cat_count > 100 && $cat_count <= 200) { 
      wc_add_notice('U krijgt bij het afhalen €25 gratis vuurwerk!', 'notice'); 
     } elseif ($cat_count > 200 && $cat_count <= 300) { 
      wc_add_notice('U krijgt bij het afhalen €50 gratis vuurwerk!', 'notice'); 
     } elseif ($cat_count > 300 && $cat_count <= 400) { 
      wc_add_notice('U krijgt bij het afhalen €75 gratis vuurwerk!', 'notice'); 
     } elseif ($cat_count >= 400) { 
      wc_add_notice('U krijgt bij het afhalen €100 gratis vuurwerk!', 'notice'); 
     } 
    return $cat_count; 
} 

ユーザーは現在、どのくらいの量を得ているか知っています。しかし、彼らのカートでのみ。私はどこでも電子メール、請求書などからこの金額を呼びたいと思っています。 私はこの問題で迷っています。誰にも解決策がありますか?

種類はWC()->cartオブジェクトが受注にし、電子メール通知では動作しません...だから、顧客がチェックアウトを持っていたら、あなたはそれを使用傾ける

答えて

0

について。

また、if (! is_page('winkelmand')) return;とこのコードは、'winkelmand' ...注文のためだけに機能します。あなたは3つの引数を使用して再配置機能を見つけ下記

  • $cat_id(カテゴリID)
  • $arg(オプション:オーダーIDまたはWC_Orderオブジェクト)
  • $is_email(オプション:(ブール値)は、電子メール通知でのみ「true」に設定されます)

この関数には2つのループがあります。

  • 定義されていない場合$arg動作するのカートループ...
  • $argが定義されている場合(注文IDや順序オブジェクトによって)の代わりに動作します注文項目ループ。ここで

あなたの関数のコードです:

function cat_sum($cat_id, $arg = null, $is_email = false) { 
    // Will work everywhere except on page 'winkelmand' 
    if (is_page('winkelmand')) return; 

    $total_count = 0; 
    $type = gettype($arg); 

    // 1. WC_Cart 
    if($type == 'NULL' && gettype(WC()->cart) == 'object' && ! WC()->cart->is_empty()){ 
     // Iterating through each cart item 
     foreach(WC()->cart->get_cart() as $cart_item) 
      if(has_term($cat_id, 'product_cat', $cart_item['product_id'])) 
       $total_count += $cart_item['data']->get_price() * $cart_item['quantity']; 
     $is_order = false; // Not an order 
    } 
    // Order ID is set in $arg 
    elseif($type == 'integer' || $type == 'string'){ 
     // get an instance of the WC_Order object 
     $order = wc_get_order($arg); 
     $is_order = true; // An order 
    } 
    // WC_Order Object is set in $arg 
    elseif($type == 'object'){ 
     $order = $arg; 
     $is_order = true; // An order 
    } 
    else return; 

    // 2. WC_Order 
    if($is_order) 
     foreach($order->get_items() as $item) 
      if(has_term($cat_id, 'product_cat', $item->get_product_id())) 
       $total_count += $item->get_product()->get_price() * $item->get_quantity(); 

    // Display notice 
    if ($total_count >= 40 && $total_count <= 100) 
     $message = __('U krijgt bij het afhalen €10 gratis vuurwerk!'); 
    elseif ($total_count > 100 && $total_count <= 200) 
     $message = __('U krijgt bij het afhalen €25 gratis vuurwerk!'); 
    elseif ($total_count > 200 && $total_count <= 300) 
     $message = __('U krijgt bij het afhalen €50 gratis vuurwerk!'); 
    elseif ($total_count > 300 && $total_count <= 400) 
     $message = __('U krijgt bij het afhalen €75 gratis vuurwerk!'); 
    elseif ($total_count >= 400) 
     $message = __('U krijgt bij het afhalen €100 gratis vuurwerk!'); 
    else return; 

    if(! $is_email){ 
     wc_add_notice($message, 'notice'); 
     return $total_count; 
    } else { 
     return array(
      'total' => $total_count, 
      'notice' => $message 
     ); 
    } 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。


USAGE:

1)WC_Cartオブジェクトが(利用可能である顧客が)チェックアウトを持って前に。あなたは(「服」カテゴリーで例えば)がそうであるようにあなたはそれを使用します:

$cat_count = cat_sum('clothing'); 
echo '<p>'.$cat_count.'</p>'; 

2)WC_Cartオブジェクトは(使用できない顧客が)チェックアウトを持っていた後。あなたは、注文に注文IDまたはこの例のようにWC_Orderオブジェクトを設定する必要がありますページ(ありがとう)を受信:

add_action('woocommerce_thankyou', 'cat_count_in_thankyou', 10, 1); 
function cat_count_in_thankyou($order_id) { 
    echo '<p>'.cat_sum('clothing', $order_id).'</p>'; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルに入るか、また、任意のプラグインファイルに保存します。電子メール通知に

3)(WC_Cartオブジェクトが使用できないと通知が表示されません)、あなたは注文IDまたはWC_Orderオブジェクトを設定する必要があります。この場合、3番目の引数はtrueに設定されています。この関数は、カテゴリ数と対応するメッセージ(通知)を持つ配列を返します。

この例では、電子メール通知に動作します:

// Display the total Cat in email notifications 
add_action('woocommerce_email_after_order_table', 'add_cat_sum_to_emails', 9, 4); 
function add_cat_sum_to_emails($order, $sent_to_admin, $plain_text, $email){ 
    $cat_sum = cat_sum('clothing', $order, true); 
    echo '<p>Total cat: '.$cat_sum['total'].'</p>'; 
} 

// Display the notice in email notifications 
add_action('woocommerce_email_order_details', 'add_custom_notice_to_emails', 4, 4); 
function add_custom_notice_to_emails($order, $sent_to_admin, $plain_text, $email){ 
    $cat_sum = cat_sum('clothing', $order, true); 
    echo '<p style="border:solid 1px #333; padding:12px;"> '.$cat_sum['notice'].'</p>'; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

すべてがテストされ、動作します。

関連する問題