add_action( 'woocommerce_after_checkout_validation', function( $fields, $errors ) {
// Settings
$product_title = 'Product Title Here - Variation Name';
$skip_countries = [ 'US', 'CA' ];
$error_message = '
Sorry, %s can only be purchased from a USA or Canada billing address.
';
// Skip Specified Countries
if( in_array( $fields['billing_country'], $skip_countries ) ) {
return;
}
// Match Product Title To Cart Items
$matched = false;
foreach( WC()->cart->get_cart() as $item ) {
$product = isset( $item['variation_id'] )
? wc_get_product( $item['variation_id'] )
: wc_get_product( $item['product_id'] );
if( $product && method_exists( $product, 'get_name' ) ) {
if( $product->get_name() == $product_title ) {
$matched = true;
}
}
}
// Matched Cart Show Error
if( $matched ) {
$errors->add(
'validation',
sprintf( $error_message, $product_title )
);
}
}, 10, 2 );
Checkout restrict specific products and countries
Restricts a specific product or variation to specified country codes in checkout.
How to use
- Log into a staging, development, or locally hosted clone of your site
- Install and activate Code Snippets
- WP Admin > Snippets > Add New
- Copy and paste the code from the Description tab above
- Check to ensure formatting came over properly and no syntax errors show up in the editor
- Customize the code as desired
- Add a meaningful title
- Select whether to run on front-end or back-end (or both)
- Click “Save and Activate”
- Test your site to ensure it works
- Disable if any problems, or recover
- Repeat for live environment
License
All code snippets are licensed GPLv2 (or later) matching WordPress licensing.
Disclaimer of warranty:
Except when otherwise stated in writing the copyright holders and/or other parties provide the program as-is without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
Support
- Describe the issue and what you’ve observed.
- Describe your expected outcome(s).
- List steps to reproduce the issue.
- Optionally provide screen-shot or video URLs.
