WooCommerce:特定のカテゴリーに属する商品の支払い方法を非表示にする
特定のカテゴリーやタームに属する商品の支払い方法を非表示にするTipsです。
例えばカテゴリー「パソコン」の商品がカートにあれば、チェックアウトページで「PayPal支払い」や「代引支払い」を非表示にしたい時があります。
利用シーンが多いと思うので備忘録として残します。
特定カテゴリーの商品の支払いを非表示にする
サンプルでは、カテゴリーIDの1と11の商品がカートに入っている場合、チェックアウトページで「paypal支払い」が非表示になります。
functions.php
add_filter( 'woocommerce_available_payment_gateways', 'unset_gateway_by_category' );
function unset_gateway_by_category( $available_gateways ) {
$unset = false;
$category_ids = array( 1, 11 ); //カテゴリーIDを記入
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
$terms = get_the_terms( $values['product_id'], 'product_cat' );
foreach ( $terms as $term ) {
if ( in_array( $term->term_id, $category_ids ) ) {
$unset = true;
break;
}
}
}
if ( $unset == true ) unset( $available_gateways['paypal'] ); //非表示にする支払い。
return $available_gateways;
}
非表示にする支払いは下記があります。
basic | 銀行支払い |
col | 代引き支払い |
paypal | ペイパル支払い |
cc | クレジットカード支払い |
bankjp | 銀行振込 |
cheque | 小切手支払い |
プラグイン「Conditional Shipping and Payments」を使っても同じことができます。
Conditional Shipping and Payments
Conditional Shipping and Paymentsはカテゴリー以外にも合計価格や配送先など、いろいろな条件で支払い方法を非表示にすることができます。
しかし、Conditional Shipping and Paymentsは、カスタムタクソノミーのタームを条件とすることができません。
そこで、先程のコードを使ってタームを条件として支払い方法を非表示にします。
特定のカスタムタクソノミーのタームに属する商品の支払い方法を非表示にする
カスタムタクソノミーは「payoptions」
ターム「ID5」と「ID6」に属する商品
支払い方法「paypal」を非表示にします
functions.php
add_filter( 'woocommerce_available_payment_gateways', 'unset_gateway_by_category' );
function unset_gateway_by_category( $available_gateways ) {
$unset = false;
$category_ids = array( 5,6 ); //タームのID
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
$terms = get_the_terms( $values['product_id'], 'payoptions' ); //タクソノミー名
foreach ( $terms as $term ) {
if ( in_array( $term->term_id, $category_ids ) ) {
$unset = true;
break;
}
}
}
if ( $unset == true ) unset( $available_gateways['paypal'] ); //非表示にする支払い方法
return $available_gateways;
}
タームID5と6の商品がカートに入っていると、チェックアウトページで「paypal支払い」が非表示になりました。
合計金額によって支払い方法を非表示にする方法
例えば「合計金額が5,000円以下は代引不可」や「合計金額が5,000円位上はpaypal支払い不可」などにしたい時に使えます。
functions.php
add_filter('woocommerce_available_payment_gateways', 'woocs_filter_gateways', 1);
function woocs_filter_gateways($gateway_list)
{
if (WC()->cart->subtotal > 5000) //金額と大なり小なりを記入します
{
unset($gateway_list['cod']); //非表示にする支払い方法を記入
}
return $gateway_list;
}
サンプルでは、合計金額5,000円以下は代引き支払いは非表示になります。
条件によって支払い方法を非表示にしたいという要望は少なくないので、使う時もあると思います。