概要
woocommerce_before_get_rates_for_package
は、WooCommerceで配送方法を取得する前に実行されるアクションフックです。このフックは、カートの配送オプションをカスタマイズしたり、特定の条件に基づいて配送方法を変更したりするために使用されます。主に以下のような機能を実装する際によく使用されます。
- 特定の条件に基づく配送コストの調整
- 限定配送方法の表示/非表示
- カスタム配送ロジックの追加
- 複数の配送オプションを動的に生成
- 配送先に基づく配送エリアの制限
- クーポンやプロモーションによる配送コストの変更
構文
add_action('woocommerce_before_get_rates_for_package', 'your_function_name', 10, 2);
パラメータ
$package
(array): 配送パッケージの情報を含む配列$shipping_method
(array): 使用する配送方法を指定するための配列
戻り値
このアクション自体には戻り値はありません。カスタム処理を実行する目的で使用されます。
使用可能なバージョン
- WooCommerce バージョン: 2.0 以降
- WordPress バージョン: 4.0 以降
サンプルコード
サンプル1: 特定の国への配送コストを調整する
add_action('woocommerce_before_get_rates_for_package', 'adjust_shipping_cost_for_country', 10, 2);
function adjust_shipping_cost_for_country($package, $shipping_method) {
// 特定の国向けの特別な配送コストを設定
if (isset($package['destination']['country']) && $package['destination']['country'] == 'US') {
foreach ($shipping_method as $method) {
if ($method->id == 'flat_rate') {
$method->cost += 5; // アメリカへの配送コストを5ドル増加
}
}
}
}
このコードは、アメリカ(US)に配送される場合、flat_rate
配送メソッドのコストを5ドル増加させるものです。
サンプル2: 無料配送オプションを条件付きで表示
add_action('woocommerce_before_get_rates_for_package', 'conditionally_display_free_shipping', 10);
function conditionally_display_free_shipping($package) {
if (WC()->cart->subtotal < 50) {
// 無料配送を削除
unset(WC()->shipping->packages[0]['rates']['free_shipping:1']);
}
}
このコードは、カートの合計が50ドル未満であれば、free_shipping
配送メソッドを削除します。
サンプル3: 特定の配送方法を削除
add_action('woocommerce_before_get_rates_for_package', 'remove_shipping_method', 10);
function remove_shipping_method($package) {
// 特定の配送方法を削除
unset($package['rates']['flat_rate:1']);
}
このコードは、必要に応じて特定の配送方法(ここではflat_rate:1
)を削除します。
サンプル4: 複数の配送オプションを追加
add_action('woocommerce_before_get_rates_for_package', 'add_custom_shipping_methods', 10);
function add_custom_shipping_methods($package) {
// 複数のカスタム配送メソッドを追加
$custom_methods = array(
'Custom Method A' => 'custom_method_a',
'Custom Method B' => 'custom_method_b',
);
foreach ($custom_methods as $label => $id) {
$package['rates'][$id] = new stdClass();
$package['rates'][$id]->id = $id;
$package['rates'][$id]->label = $label;
$package['rates'][$id]->cost = 10; // 固定価格
}
}
このコードは、任意の配送メソッド(Custom Method A
と Custom Method B
)を追加し、それぞれ10ドルのコストを設定しています。
サンプル5: 配送先による配送オプションの制限
add_action('woocommerce_before_get_rates_for_package', 'limit_shipping_methods_by_location', 10);
function limit_shipping_methods_by_location($package) {
// 特定の地域への配送オプションを制限
if ($package['destination']['state'] == 'CA') {
unset($package['rates']['flat_rate:1']); // カリフォルニアからはフラットレート配送を削除
}
}
このコードは、カリフォルニア州への配送の場合、特定の配送メソッド(flat_rate:1
)を削除します。
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
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 |