kantes
kantes

Reputation: 46

Hide WooCommerce Payment Method Function Disables WordPress nav-menus.php

I have made hidden the other payment methods if selected COD method (which is flat_rate:5 in my case). I. am using Show hide payment methods based on selected shipping method in Woocommerce answer where I have made some minor edits.

The code works exactly as it should be however, I can't edit menus in "Appearance -> Menus" screen. It seems no problem in front-end.

function payment_gateways_based_on_chosen_shipping_method( $gateways ) {
// Get chosen shipping methods
$chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );

if ( in_array( 'flat_rate:5', $chosen_shipping_methods ) )
{
    unset( $gateways['bacs'] );
    unset( $gateways['iyzico'] );
}

return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );

I am totally confused where is the bug and why it only appears on "Appearence -> Menus" page.

Also this guy from WordPress support forum had encounter similar issue with different code but in same filter (woocommerce_available_payment_gateways).

Thank you.

Upvotes: 1

Views: 231

Answers (1)

ZecKa
ZecKa

Reputation: 2934

That's because WC()->session is null on backoffice. So you can't call method "get".

You need to check if you are in admin area before execute your code:

function payment_gateways_based_on_chosen_shipping_method( $gateways ) {
  if(is_admin()){
    return $gateways;
  }
  // Get chosen shipping methods
  $chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );

  if ( in_array( 'flat_rate:5', $chosen_shipping_methods ) ){
    unset( $gateways['bacs'] );
    unset( $gateways['iyzico'] );
  }

  return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );

Upvotes: 1

Related Questions