WooCommerce-betaalmethoden verbergen per verzendzone
Verberg Cash on Delivery of een andere WooCommerce-betaalmethode voor een specifieke verzendzone, terwijl klanten in andere bezorggebieden die betaalopties wel blijven zien.
Laatst bijgewerkt:
Engelstalig origineel op juistheid gecontroleerd door Jesse Nickles
Controleer eerst de ingebouwde opties
WooCommerce koppelt het adres van een klant aan de eerste toepasselijke verzendzone en bepaalt op basis daarvan welke verzendmethoden beschikbaar zijn. Dit wordt uitgelegd in de instructies voor verzendzones. Via de standaardinstellingen kun je betaalmethoden niet rechtstreeks aan een zone koppelen. Controleer daarom de volgorde van de zones voordat je een aangepaste beperking toevoegt.
Wil je alleen Cash on Delivery beperken, kijk dan eerst naar Enable for shipping methods onder WooCommerce → Settings → Payments → Take offline payments → Cash on Delivery → Manage. Volgens de WooCommerce-documentatie over Cash on Delivery beperkt deze instelling de betaalmethode tot geselecteerde verzendmethoden of tarieven. Dat kan voldoende zijn als die methoden exclusief in de bedoelde zones worden gebruikt, maar je kunt er niet rechtstreeks een verzendzone-ID mee selecteren.
- Open in WP Admin WooCommerce → Settings → Shipping → Shipping zones. Bewerk de zone die je wilt beperken en noteer de numerieke
zone_iduit de beheer-URL. Verwar deze niet met een instantie-ID van een verzendmethode. - Controleer WooCommerce → Settings → Payments en bepaal welke betaalmethode je wilt beperken. Gebruik de interne ID, niet de naam die klanten bij het afrekenen zien.
De ingebouwde offline betaalmethoden van WooCommerce gebruiken deze gateway-ID’s:
| Betaalmethode | Gateway-ID |
|---|---|
| Cash on Delivery | cod |
| Direct Bank Transfer | bacs |
| Check Payments | cheque |
Voor betaalmethoden uit extensies, zoals Stripe, PayPal of WooPayments, moet je eerst de documentatie of broncode van de plugin raadplegen om de juiste ID te vinden.
De betaalmethode voor die zone verbergen
Maak eerst een back-up en test de wijziging in een testomgeving. Voeg dit codefragment toe aan functions.php van je actieve childtheme, binnen de bestaande PHP-code. Gebruik je HoverCraft, volg dan de instructies voor childthemes in plaats van het hoofdthema te bewerken. Vervang 3 door je zone-ID, cod door de ID van de betaalmethode die je wilt verbergen en myshop op beide plaatsen door een unieke prefix voor je site.
function myshop_hide_gateway_by_zone( $gateways ) {
if ( ! function_exists( 'WC' ) || ! WC()->cart || ! class_exists( 'WC_Shipping_Zones' ) ) {
return $gateways;
}
foreach ( WC()->cart->get_shipping_packages() as $package ) {
$zone = WC_Shipping_Zones::get_zone_matching_package( $package );
if ( (int) $zone->get_id() === 3 ) {
unset( $gateways['cod'] );
break;
}
}
return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'myshop_hide_gateway_by_zone', 20 );
Het filter gebruikt de WooCommerce-API voor verzendzones en verbergt de betaalmethode zodra een verzendpakket overeenkomt met de zone. Winkelwagens met uitsluitend virtuele producten hebben mogelijk geen verzendpakket. Bij winkels met gesplitste zendingen verdwijnt de betaalmethode voor het hele afrekenproces zodra één pakket overeenkomt.
Het afrekenen testen
- Voeg een verzendbaar product toe aan de winkelwagen en voer een adres in de beperkte zone in. De gekozen betaalmethode moet verdwijnen nadat het afrekenen is bijgewerkt.
- Wijzig het adres naar een andere zone. De betaalmethode moet terugkeren als deze verder is ingeschakeld en beschikbaar is.
- Test als gast en als ingelogde klant en controleer dat in de beperkte zone ten minste één bruikbare betaalmethode overblijft.
WooCommerce noemt dit PHP-filter gedeeltelijk ondersteund in het Checkout Block. Voor sommige betaalmethoden is daarom aanvullende blokspecifieke afhandeling nodig. Test met je daadwerkelijke betaalmethode, of de winkel nu het Checkout Block of de klassieke checkout-shortcode gebruikt.
Als de beperking niet werkt
- Verkeerde zone: Controleer het bezorgadres en de
zone_id. - Verkeerde betaalmethode: Controleer de interne ID van de gateway. De zichtbare naam bij het afrekenen kan anders zijn.
- Geen verandering na invoer van een adres: Controleer het actieve childtheme, PHP-fouten, caching en andere code die beschikbare betaalmethoden filtert. Test in een testomgeving voordat je extensies uitschakelt.
- Betaalmethode ontbreekt overal: Controleer eerst in de gewone WooCommerce-instellingen of de methode is ingeschakeld en beschikbaar, voordat je de nieuwe beperking verdenkt.
In plaats daarvan een beperkingsplugin gebruiken
Met de WooCommerce-extensie Conditional Shipping and Payments kun je betaalmethoden verbergen via WooCommerce → Settings → Restrictions → Payment Gateways. Voeg een beperking toe, kies de gateway onder Exclude Gateways en stel voorwaarden in, zoals Shipping Method of de verzendbestemming.
Die voorwaarden zijn niet gelijk aan een directe vergelijking met de ID van een verzendzone. Als een verzendmethode alleen in de bedoelde zone voorkomt, kan een voorwaarde op Shipping Method voldoende zijn. Gebruik anders een regel op basis van de exacte zone. Controleer de compatibiliteit met je afrekenpagina en betaalextensie voordat je de beperking bij livebestellingen gebruikt.