WordPressのWooCommerceにて、Aカテゴリーに属する商品は”店頭お渡し”のみだから、チェックアウトページの「別の住所へ配送する」オプションを非表示にしたい。
調べて実装できたので、メモしておく。
functios.phpに以下のコードを貼り付けるとOK
今回のサンプルコードでは、カテゴリースラッグの”smile”・”example”・”test”の3つのカテゴリーの商品がカートに含まれている場合、「別の住所へ配送する」オプションが非表示となる。
/* hide another shipping_address for category */
add_filter( 'woocommerce_cart_needs_shipping_address', 'custom_cart_needs_shipping_address', 50, 1 );
function custom_cart_needs_shipping_address( $needs_shipping_address ) {
// Loop though cat items
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( has_term( array('smile','example','test'), 'product_cat', $cart_item['product_id'] ) ) {
// shipping address hidden
return false;
}
}
return $needs_shipping_address;
}
woocommerce_cart_needs_shipping_address フックを操作している。
なお、全ての商品にて”別の住所へ配送する”オプションを非表示にするには、こちらのコードを使う。(設定画面からも変更できるので、コードでなくても良いが、参考に)
add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');
今回参考になったのが、こちらの記事。
バーチャル商品に設定したカテゴリーで、逆に「”別の住所へ配送する”オプションを表示」したいという内容だ。
記事のAnswerコードが参考になった。
add_filter( 'woocommerce_cart_needs_shipping_address', 'custom_cart_needs_shipping_address', 50, 1 );
function custom_cart_needs_shipping_address( $needs_shipping_address ) {
// Loop though cat items
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( has_term( array('gift'), 'product_cat', $cart_item['product_id'] ) ) {
// Force enable shipping address for virtual "gift" products
return true;
}
}
return $needs_shipping_address;
}
trueをfalseに置き換えると良いので、とても助かった。感謝です。