Deaktivieren Sie alle Zahlungsmethoden basierend auf der Geo-IP des Benutzerlandes in WooCommerce

Lesezeit: 3 Minuten

Deaktivieren Sie alle Zahlungsmethoden basierend auf der Geo IP des Benutzerlandes
Dom

In meinem Woocommerce-Shop richte ich das Geolokalisierungssystem ein, wenn die Geolokalisierung ein anderes Land als IT identifiziert, möchte ich Zahlungsmethoden deaktivieren

Wenn es sich um IT (geop-ip) handelt, zeigen Sie die Zahlungsmethoden an

Wenn alle anderen Länder (Geo-IP), deaktivieren Sie alle Zahlungsmethoden.

Deaktivieren Sie alle Zahlungsmethoden basierend auf der Geo IP des Benutzerlandes
LoicTheAztec

Woocommerce hat bereits eine Geolokalisierungs-IP-Funktion durch WC_Geolocation Klassesodass Sie kein zusätzliches Plugin benötigen.

So deaktivieren Sie Zahlungs-Gateways für alle Länder außer „IT“ (Italien) Ländercode, basierend auf dem geolokalisierten IP-Land des Kunden:

// Disabling payment gateways except for the defined country codes based on user IP geolocation country
add_filter( 'woocommerce_available_payment_gateways', 'geo_country_based_available_payment_gateways', 90, 1 );
function geo_country_based_available_payment_gateways( $available_gateways ) {
    // Not in backend (admin)
    if( is_admin() ) 
        return $available_gateways;

    // ==> HERE define your country codes
    $allowed_country_codes = array('IT');

    // Get an instance of the WC_Geolocation object class
    $geolocation_instance = new WC_Geolocation();
    // Get user IP
    $user_ip_address = $geolocation_instance->get_ip_address();
    // Get geolocated user IP country code.
    $user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );

    // Disable payment gateways for all countries except the allowed defined coutries
    if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) )
        $available_gateways = array();

    return $available_gateways;
}

Der Code wird in die Datei functions.php Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.


Verwandt:

  • Deaktivieren Sie das WooCommerce-Zahlungsgateway für Gäste und bestimmte Benutzerrollen
  • Aktivieren der Zahlungsmethode basierend auf dem Standort des Kunden
  • Ausblenden einer bestimmten Zahlungsmethode basierend auf dem Gesamtgewicht in Woocommerce
  • Zahlungsmethode basierend auf dem Produkttyp in WooCommerce ausblenden

  • Wie würde ich nur bestimmte Zahlungsgateways deaktivieren?

    – Julian Wagner

    27. Januar 2021 um 17:50 Uhr

  • @JulianWagner Zum Beispiel verwenden unset($available_gateways['bacs']); anstatt $available_gateways = array();

    – LoicTheAztec

    27. Januar 2021 um 20:14 Uhr

  • Danke, ich habe das selbst herausgefunden und ein geändertes Snippet unten gepostet.

    – Julian Wagner

    27. Januar 2021 um 22:18 Uhr

Finden Sie idiomatisch die Anzahl der Vorkommen eines bestimmten Werts
Julius Wagner

Hier ist eine Variation von @LoicTheAztec answer, die nur eine bestimmte Zahlungsmethode statt alle deaktiviert:

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

  // ==> HERE define your country codes
  $allowed_country_codes = array('DE','AT');

  // Get an instance of the WC_Geolocation object class
  $geolocation_instance = new WC_Geolocation();
  // Get user IP
  $user_ip_address = $geolocation_instance->get_ip_address();
  // Get geolocated user IP country code.
  $user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );

  // Disable payment gateways for all countries except the allowed defined coutries
  if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) ) {
    unset( $available_gateways['stripe_sofort'] );
  }

  return $available_gateways;
}

Ich kenne Istack, sowie maxmind etc.. Ich dachte an etwas einfacheres wie diese Funktion, die auf dem blling_country und nicht auf dem geo-ip country basiert:

function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( is_admin() ) return;
if ( isset( $available_gateways['authorize'] ) && $woocommerce->customer->get_billing_country() <> 'US' ) {
unset( $available_gateways['authorize'] );
} else if ( isset( $available_gateways['paypal'] ) && $woocommerce->customer->get_billing_country() == 'US' ) {
unset( $available_gateways['paypal'] );
}
return $available_gateways;
}

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );

Um das Land des Benutzers herauszufinden, können Sie ein Tool wie verwenden FreeGeoIp, jetzt umbenannt in Ipstack. Sie stellen dem Dienst eine IP-Adresse zur Verfügung, die Ihnen die Länderadresse mitteilt, in der sich der Benutzer wahrscheinlich befindet (neben anderen Informationen).

Es gibt zwei Möglichkeiten 1. Verwenden der gehosteten API (kostenlos für 10.000 Anfragen und kostenpflichtig für mehr als das) 2. Herunterladen einer Version vom GitHub-Link und Hosten dieser selbst

Wenn Sie das Land des Benutzers kennen müssen, können Sie eine HTTP-Anfrage mit der IP-Adresse des Benutzers an die API senden und diese Informationen dann verwenden, um die Zahlungsmethode zu aktivieren oder zu deaktivieren.

1004920cookie-checkDeaktivieren Sie alle Zahlungsmethoden basierend auf der Geo-IP des Benutzerlandes in WooCommerce

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy