概要
woocommerce_product_needs_shipping
フィルタは、WooCommerceにおいて商品が配送を必要とするかどうかを判断するためのフックです。このフィルタを使用することで、特定の条件に基づいて商品が配送が必要かどうかをカスタマイズできます。以下のシナリオで特に役立つことが多いです:
- 特定の商品の種類を識別して送料を追加する場合
- デジタル商品やダウンロード可能商品に対して配送不要とする場合
- 特定のカスタムフィールドに基づいて商品の配送要否を変更する場合
- プロモーションが適用された商品の配送要否を調整する場合
- 商品カテゴリに基づいて送料を必要にする場合
- 外部APIなどから取得したデータを元に商品の配送要否を動的に設定する場合
構文
add_filter( 'woocommerce_product_needs_shipping', 'custom_needs_shipping', 10, 2 );
パラメータ
$needs_shipping
: 初期値(Boolean)。配送が必要な場合はtrue
、そうでない場合はfalse
。$product
: 対象のWC_Productオブジェクト。
戻り値
フィルタを通じて返される値(Boolean)。配送が必要な場合はtrue
、そうでない場合はfalse
。
WooCommerceおよびWordPressのバージョン
- WooCommerce: すべてのバージョンで使用可能
- WordPress: すべてのバージョンで使用可能
この関数のアクションでの使用可能性
アクション | 使用可能 |
---|---|
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_product_needs_shipping', 'change_shipping_based_on_category', 10, 2 );
function change_shipping_based_on_category( $needs_shipping, $product ) {
// 商品が特定のカテゴリに属する場合、配送を必要としない
if ( has_term( 'no-shipping', 'product_cat', $product->get_id() ) ) {
return false;
}
return $needs_shipping;
}
これは、no-shipping
カテゴリに属する商品は配送が必要ないと設定するサンプルコードです。
サンプル2: カスタムフィールドに基づいた配送要否
add_filter( 'woocommerce_product_needs_shipping', 'check_custom_field_for_shipping', 10, 2 );
function check_custom_field_for_shipping( $needs_shipping, $product ) {
// カスタムフィールドが設定されていれば、配送不要とする
if ( get_post_meta( $product->get_id(), '_is_digital', true ) === 'yes' ) {
return false;
}
return $needs_shipping;
}
このコードでは、カスタムフィールド_is_digital
がyes
であれば配送不要としています。
サンプル3: 特定の製品の配送要否を変更
add_filter( 'woocommerce_product_needs_shipping', 'specific_product_needs_shipping', 10, 2 );
function specific_product_needs_shipping( $needs_shipping, $product ) {
// 商品ID 123 は配送不要
if ( $product->get_id() === 123 ) {
return false;
}
return $needs_shipping;
}
これは、特定の商品ID(123)の場合は配送を必要としないように設定するサンプルです。
サンプル4: 商品のタイプに基づいて配送要否を変更
add_filter( 'woocommerce_product_needs_shipping', 'change_shipping_based_on_product_type', 10, 2 );
function change_shipping_based_on_product_type( $needs_shipping, $product ) {
// 'virtual'タイプの商品は配送不要
if ( $product->is_virtual() ) {
return false;
}
return $needs_shipping;
}
このコードは、virtual
タイプの商品が配送を必要としないように変更しています。
サンプル5: APIから取得した情報に基づく配送要否
add_filter( 'woocommerce_product_needs_shipping', 'api_based_shipping_needs', 10, 2 );
function api_based_shipping_needs( $needs_shipping, $product ) {
// 外部APIからデータを取得する処理を想定
$api_response = some_external_api_call( $product->get_id() );
if ( isset( $api_response['needs_shipping'] ) ) {
return $api_response['needs_shipping'];
}
return $needs_shipping;
}
このサンプルは、外部APIから取得したデータに基づいて配送要否を動的に設定する方法を示しています。