について。
また、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ファイルやも任意のプラグインファイルになります。
すべてがテストされ、動作します。