2
votes

I don't know if it's possible, but, we would need to add some different payment methods for Barcelona.

So, our idea is that if the customer lives in Barcelona area (Catalunya), he will see a credit card payment method and a bank transfer account different than the rest of Spain.

Is that possible with WooCommerce?

Thanks.

1

1 Answers

4
votes

If you want to enable this kind of feature in WooCommerce, Customers need to be registered and logged on first, as it's the only way to get they town location before checkout process.

Also you will have to change some settings in WooCommerce allowing only registerers users to checkout.

Then you will have to add some mandatory fields in the registration process as the town, zip code and country.

Once that done, it's going to be easy to enable / disable payment gateways based on this registered customer fields.

1) For customizing the registration fields:
How to add custom fields in user registration on the “My Account” page

2) For payment gateways/methods based on this Customer information, You can use a custom hooked function in woocommerce_available_payment_gateways filter hook:

add_filter( 'woocommerce_available_payment_gateways', 'custom_payment_gateways_process' );
function custom_payment_gateways_process( $available_gateways ) {
    // Not in backend (admin)
    if( is_admin() ) 
        return $available_gateways;

    if ( is_admin() || !is_user_logged_in() )
        return $available_gateways;

    $current_user_id = get_current_user_id();
    $user_meta = get_user_meta( $current_user_id );

    // User City, Postcode, State and Country code 
    $user_city = $user_meta['billing_city'];
    $user_postcode = $user_meta['shipping_postcode'];
    $user_State = $user_meta['shipping_state'];
    $user_country = $user_meta['shipping_country'];

    // Disable Cash on delivery ('cod') method example for customer out of spain:
    if ( isset( $available_gateways['cod'] ) && $user_country != 'ES' ) {
        unset( $available_gateways['cod'] );
    }

    // You can set many conditions based on the user data

    return $available_gateways;
}

This code is just an example, and you will have to set inside the right conditions for the targeted payment methods/gateways…

Code goes in functions.php file of your active child theme (or theme) or also in any plugin file.