概要
woocommerce_shipping_packages
フィルタは、WooCommerceでの配送オプションや配送先情報をカスタマイズするために使用されます。このフィルタは、カート内の商品に対する配送パッケージを変更、追加、または削除する際に役立ちます。具体的には、以下のような機能を実装する際によく使われます。
- 配送先ごとに異なる配送方法を設定する
- 商品ごとに異なる配送オプションを提供する
- 特定の商品が特定の地域での配送に制限されるようにする
- 配送方法の配列を動的に変更する
- 複数の配送先に対するカスタムロジックを適用する
- 注文条件に基づいて特別な配送オプションを追加する
構文
add_filter( 'woocommerce_shipping_packages', 'your_function_name', 10, 1 );
パラメータ
$packages
(array): 配送パッケージの配列。
戻り値
- (array): 修正された配送パッケージの配列。
使用可能なプラグインとバージョン
- WooCommerce: 2.6以上
- 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_shipping_packages', 'custom_shipping_options_for_specific_product' );
function custom_shipping_options_for_specific_product( $packages ) {
foreach ( $packages as $key => $package ) {
// 特定の商品のIDをチェック
foreach ( $package['contents'] as $item_id => $item ) {
if ( $item['product_id'] == 123 ) { // 商品IDを123に変更
$packages[$key]['shipping_classes'][] = 'custom_shipping_option';
}
}
}
return $packages;
}
引用元: https://woocommerce.com
サンプルコード2: 配送先の地域による選択的配送方法の適用
このコードは、特定の地域に基づいて配送方法を制限します。
add_filter( 'woocommerce_shipping_packages', 'restrict_shipping_methods_by_region' );
function restrict_shipping_methods_by_region( $packages ) {
foreach ( $packages as $key => $package ) {
if ( isset( $package['destination']['country'] ) && $package['destination']['country'] == 'US' ) {
$packages[$key]['shipping_methods'] = array_filter( $packages[$key]['shipping_methods'], function( $method ) {
return $method->id === 'flat_rate'; // フラットレートの配送のみ
});
}
}
return $packages;
}
引用元: https://docs.woocommerce.com
サンプルコード3: 複数の配送先のカスタマイズ
複数の配送先を扱うためのサンプルです。
add_filter( 'woocommerce_shipping_packages', 'multi_shipping_customization' );
function multi_shipping_customization( $packages ) {
// すべての配送パッケージに対してカスタム属性を追加
foreach ( $packages as $key => $package ) {
$package['custom_attribute'] = 'custom_value';
$packages[$key] = $package;
}
return $packages;
}
引用元: https://www.smashingmagazine.com
サンプルコード4: 特定の条件下における配送オプションの追加
特定の条件に基づいて特別な配送オプションを追加する例です。
add_filter( 'woocommerce_shipping_packages', 'add_special_shipping_option_based_on_condition' );
function add_special_shipping_option_based_on_condition( $packages ) {
foreach ( $packages as $key => $package ) {
if ( WC()->cart->get_subtotal() > 50 ) { // 50ドル以上の注文の場合
$package['shipping_methods']['special'] = new WC_Shipping_Method();
$package['shipping_methods']['special']->id = 'special';
$package['shipping_methods']['special']->method_title = 'Special Delivery';
$package['shipping_methods']['special']->cost = 10;
}
}
return $packages;
}
引用元: https://www.codementor.io
サンプルコード5: 商品のサイズによる配送方法の変更
商品のサイズに基づいて配送方法を調整します。
add_filter( 'woocommerce_shipping_packages', 'adjust_shipping_methods_by_product_size' );
function adjust_shipping_methods_by_product_size( $packages ) {
foreach ( $packages as $key => $package ) {
foreach ( $package['contents'] as $item_id => $item ) {
$product = wc_get_product( $item['product_id'] );
if ( $product->get_dimensions() == 'large' ) { // 大サイズの商品
// サイズが大きい場合は特別な配送方法を追加
$package['shipping_methods']['large_size_shipping'] = new WC_Shipping_Method();
$package['shipping_methods']['large_size_shipping']->id = 'large_size_shipping';
$package['shipping_methods']['large_size_shipping']->method_title = 'Large Size Delivery';
$package['shipping_methods']['large_size_shipping']->cost = 20;
}
}
}
return $packages;
}
引用元: https://www.wpexplorer.com
これらのサンプルコードを参考に、特定の要件に応じた配送オプションのカスタマイズが可能です。