私の問題の半機能的な解決策がこの回答で見つかりました WooCommerce-X数量ステップに基づく定額配送? しかし、これはカートアイテムの合計数量を数えます。顧客が一緒に梱包できる小さなアイテムを追加すると、このアイテムはカートアイテムの合計がしきい値を超えるため、送料が2倍になります。特定のクラス(つまり、大口配送クラス)がしきい値を超えた場合にのみ、配送料を2倍にする必要があります。ここに私が必要なもののいくつかの例があります。
サイト内の商品は2種類
お客様がこれらの2つの製品の組み合わせを購入した場合は、シャツパッケージにリングを追加できるため、配送料金を設定して最大の配送クラス(大量配送)を請求しました。
これが注文のサンプルです
これは、以下のコードが行っていることです
私のジレンマを参照してください?以下のコードを変更して、カートの数量ではなく、特定の配送クラスの商品のみをカウントしたいと思います。
これがコードです
add_filter( 'woocommerce_package_rates',
'change_shipping_method_rate_based_on_shipping_class_2', 11, 2 );
function change_shipping_method_rate_based_on_shipping_class_2( $rates, $package ){
$items_count = WC()->cart->get_cart_contents_count(); // Cart item count
$items_change = 5; // number of items needed to increase the cost each time
$rate_operand = ceil( $items_count / $items_change ); // Operand increase each 5 items here
foreach ( $rates as $rate_key => $rate ){
// Targetting "Flat rate"
if( 'flat_rate' === $rate->method_id ) {
$has_taxes = false;
// Set the new cost
$rates[$rate_key]->cost = $rate->cost * $rate_operand;
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
// New tax calculated cost
$taxes[$key] = $tax * $rate_operand;
$has_taxes = true;
}
}
// Set new taxes cost
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
return $rates;
}
どんな助けでもありがたいです
特定の配送クラスに属するカートアイテムの数量カウントに基づいて「定額」の配送料を変更するには、少し異なるものが必要になります。
add_filter( 'woocommerce_package_rates', 'progressive_shipping_cost_based_shipping_class_quantity_steps', 10, 2 );
function progressive_shipping_cost_based_shipping_class_quantity_steps( $rates, $package )
{
// HERE Bellow your settings
$shipping_class = "large-shipping"; // The shipping class ID
$qty_step = 3; // Items qty threshold for a step
$item_count = 0; // Initializing
// Get the shipping class ID
$class_id = get_term_by('slug', $shipping_class, 'product_shipping_class' )->term_id;
// Loop through in cart items to get the Tshirts count
foreach( $package['contents'] as $cart_item ) {
if ( $cart_item['data']->get_shipping_class_id() == $class_id ){
$item_count += $cart_item['quantity']; // Count Tshirts
}
}
// The rate operand increase each {$qty_step} depending on {$item_count}
$rate_operand = ceil( $item_count / $qty_step );
foreach ( $rates as $rate_key => $rate ){
// Targetting "Flat rate"
if( 'flat_rate' === $rate->method_id ) {
$has_taxes = false;
// Set the new cost
$rates[$rate_key]->cost = $rate->cost * $rate_operand;
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
// New tax calculated cost
$taxes[$key] = $tax * $rate_operand;
$has_taxes = true;
}
}
// Set new taxes cost
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
return $rates;
}
コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunction.phpファイルに入ります。テストして動作します。
配送キャッシュを更新する:(必須)
- このコードは、アクティブなテーマのfunction.phpファイルに既に保存されています。
- カートは空です
- 配送ゾーンの設定で、配送方法を無効/保存してから、有効/元に戻します。