Disable payments for products
-
Hello;
I want to disable some payment method for a few products.
I have code that works well:
add_filter( 'woocommerce_available_payment_gateways', 'filter_gateways', 1); function filter_gateways( $gateways ){ // Not in backend (admin) if( is_admin() ) return $gateways; // Storing special product IDs in an array $non_pp_products = array( 6009, 6010,6011,6012,6013,6014,6015,6016,6017 ); // Needed variables $is_non_prod = false; $is_prod = false; $count = 0; foreach ( WC()->cart->get_cart() as $cart_item ) { // count number of items if needed (optional) $count++; $product = $cart_item['data']; if( ! empty($product) ){ $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id; if ( in_array( $product_id, $non_pp_products ) && ! $is_non_prod ) $is_non_prod = true; if ( !in_array( $product_id, $non_pp_products ) && !$is_prod ) $is_prod = true; } } if ( $is_non_prod && ! $is_prod ) // only special products { // unset only paypal; unset( $gateways['bacs'], $gateways['przelewy24'] ); } elseif ( $is_non_prod && $is_prod ) // special and normal products mixed { // unset ALL GATEWAYS unset( $gateways['bacs'], $gateways['przelewy24'] ); } elseif ( ! $is_non_prod && $is_prod ) // only normal products (optional) { // (unset something if needed) unset( $gateways['cod'] ); } return $gateways; }
Unfortunatelly, I have to put every variation’s id into the code.
It would be much easier to put only main product id and automatically get all of its variationas.
I know there is a function ->get_children(), but i dont know how to use it in practice.
I would be grateful for any advice.
Viewing 2 replies - 1 through 2 (of 2 total)
Viewing 2 replies - 1 through 2 (of 2 total)
- The topic ‘Disable payments for products’ is closed to new replies.