概要
woocommerce_package_rates
フィルタは、WooCommerceでの配送方法の料金をカスタマイズするための強力なフックです。このフィルタを使用すると、カートに追加された製品やユーザーの配送先に基づいて、表示される配送オプションの料金を変更できます。以下のようなシナリオでよく使用されます。
- 特定の条件に基づいて配送オプションの表示/非表示を制御する。
- 顧客グループ別に異なる料金を設定する。
- プロモーションやセールの際に、特定の配送方法の料金を割引する。
- 複数の配送元からの配送料金を動的に調整する。
- 特定の郵便番号に対する送料を設定する。
- 複数の商品の重さに基づいて送料を計算する。
構文
以下のように、フィルタはadd_filter
関数を介して使用されます。
add_filter( 'woocommerce_package_rates', 'custom_function_name', 10, 2 );
パラメータ
$rates
: 配送方法の配列(キーはメソッドのID)。$package
: カートの内容や配送先に関する情報の配列。
戻り値
カスタマイズされた配送方法の配列。
使用可能なWooCommerceとWordPressのバージョン
- WooCommerce: 2.0以上
- WordPress: 4.0以上
この関数のアクションでの使用可能性
アクションフック | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプル1: 特定の配送方法を非表示にする
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method', 10, 2 );
function hide_specific_shipping_method( $rates, $package ) {
if ( isset( $rates['flat_rate:1'] ) ) {
unset( $rates['flat_rate:1'] ); // IDが'flat_rate:1'の配送方法を非表示にする
}
return $rates;
}
このサンプルコードは、特定の配送方法をカートから非表示にする方法を示しています。
サンプル2: ロールに基づいて配送料金を変更
add_filter( 'woocommerce_package_rates', 'custom_shipping_for_roles', 10, 2 );
function custom_shipping_for_roles( $rates, $package ) {
if ( current_user_can( 'wholesale_customer' ) ) {
// 卸売顧客には10%の割引を適用
foreach ( $rates as $rate_key => $rate ) {
$rates[$rate_key]->cost *= 0.9; // 10%割引
}
}
return $rates;
}
このコードでは、特定のユーザーロール(卸売顧客)に基づいて配送料金を調整します。
サンプル3: 送料の最小金額を設定
add_filter( 'woocommerce_package_rates', 'minimum_shipping_amount', 10, 2 );
function minimum_shipping_amount( $rates, $package ) {
$minimum_amount = 15; // 最小金額
if ( ! WC()->cart->is_empty() && WC()->cart->total < $minimum_amount ) {
foreach ( $rates as $rate_key => $rate ) {
$rates[$rate_key]->cost += 5; // 最小金額に満たない場合、送料を5ドル追加
}
}
return $rates;
}
このサンプルでは、カートの合計金額が特定の金額に満たない場合、送料を追加する方法を示しています。
サンプル4: 郵便番号に基づく送料設定
add_filter( 'woocommerce_package_rates', 'shipping_cost_by_zipcode', 10, 2 );
function shipping_cost_by_zipcode( $rates, $package ) {
$zipcode = $package['destination']['postcode'];
if ( $zipcode == '12345' ) {
foreach ( $rates as $rate_key => $rate ) {
$rates[$rate_key]->cost += 10; // 特定の郵便番号の場合、10ドル追加
}
}
return $rates;
}
このサンプルは、郵便番号に基づいた追加送料の設定例です。
サンプル5: 商品の重さに基づいた送料の調整
add_filter( 'woocommerce_package_rates', 'adjust_shipping_by_weight', 10, 2 );
function adjust_shipping_by_weight( $rates, $package ) {
$weight = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$weight += $cart_item['data']->get_weight();
}
if ( $weight > 20 ) {
foreach ( $rates as $rate_key => $rate ) {
$rates[$rate_key]->cost += 15; // 20kgを超える場合、15ドル追加
}
}
return $rates;
}
このコードは、カート内の商品の重さに応じて送料を調整する方法を示しています。