Enabling Payment method based on the customers location

社会主义新天地 提交于 2021-02-19 05:25:23

问题


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:


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.



来源:https://stackoverflow.com/questions/42106457/enabling-payment-method-based-on-the-customers-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!