概要
woocommerce_cart_shipping_packages
フィルタは、WooCommerce のショッピングカートにおける配送パッケージの設定をカスタマイズするために使用されます。このフィルタを利用すると、配送エリア、配送方法、商品情報などに基づいて、カスタムの配送パッケージを作成することができます。主な使いどころには以下のようなものがあります。
- 地域ごとに異なる配送方法を設定する
- 特定の商品に対して独自の配送オプションを提供する
- 複数の配送アドレスに対して異なる配送料金を適用する
- 商品のサイズや重量に基づいて配送パッケージを変更する
- クーポンや特典に応じて配送オプションを調整する
- 商品の特性に応じたカスタム配送ロジックを実装する
構文
add_filter('woocommerce_cart_shipping_packages', 'custom_shipping_packages', 10, 1);
パラメータ
$packages
(array): 現在の配送パッケージのリスト。
戻り値
- (array): 変更された配送パッケージのリスト。
WooCommerce バージョン
- このフィルタは WooCommerce 1.0 以降で使用可能です。
WordPress バージョン
- このフィルタは WordPress 3.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_cart_shipping_packages', 'custom_shipping_packages_by_region');
function custom_shipping_packages_by_region($packages) {
foreach ($packages as $key => $package) {
if($package['destination']['country'] == 'JP') {
$packages[$key]['rates'] = array_merge($package['rates'], array(
'flat_rate:0' => new WC_Shipping_Rate('flat_rate:0', '新しい配送料', 500, array(), 'flat_rate')
));
}
}
return $packages;
}
このコードは日本国内の配送手続きに対して特定の配送料を追加します。
サンプル2: 商品サイズに基づく配送パッケージのカスタマイズ
add_filter('woocommerce_cart_shipping_packages', 'customize_shipping_packages_by_size');
function customize_shipping_packages_by_size($packages) {
foreach ($packages as $key => $package) {
$total_weight = 0;
foreach ($package['contents'] as $item_id => $values) {
$product_weight = $values['data']->get_weight();
$total_weight += $product_weight * $values['quantity'];
}
if ($total_weight > 10) {
$packages[$key]['rates']['flat_rate:1'] = new WC_Shipping_Rate('flat_rate:1', '重量のための配送料', 1500, array(), 'flat_rate');
}
}
return $packages;
}
このコードは、商品の合計重量が10キロを超えた場合に特別な配送料を追加します。
サンプル3: 配送方法のカスタマイズ
add_filter('woocommerce_cart_shipping_packages', 'customize_shipping_methods');
function customize_shipping_methods($packages) {
if (isset($packages[0]['rates']['free_shipping:1'])) {
unset($packages[0]['rates']['free_shipping:1']);
}
return $packages;
}
このコードは、条件に基づいて特定の配送方法(例:送料無料)を削除します。
サンプル4: 特定の商品に対する配送料の特別処理
add_filter('woocommerce_cart_shipping_packages', 'custom_shipping_for_specific_product');
function custom_shipping_for_specific_product($packages) {
foreach ($packages as $key => $package) {
foreach ($package['contents'] as $item_id => $values) {
if ($values['data']->get_id() === 123) {
$packages[$key]['rates'] = array(
'flat_rate:2' => new WC_Shipping_Rate('flat_rate:2', '特別送料', 1000, array(), 'flat_rate')
);
break;
}
}
}
return $packages;
}
このコードは、特定の商品(IDが123)の場合に特別な配送料を設定します。
サンプル5: 複数の配送アドレスに対応したカスタマイズ
add_filter('woocommerce_cart_shipping_packages', 'split_packages_by_address');
function split_packages_by_address($packages) {
if (count($packages) > 1) {
// 配送先に対して追加の処理を行う
// 例えば、特定の条件のもとパッケージを分割するなど
}
return $packages;
}
このコードは、複数の配送先がある場合に、追加の処理を行う準備をしますが、具体的な処理は実装されていません。
これらのサンプルコードを参考に、様々な配送パッケージのカスタマイズを実装することができます。