drkskwlkr icon

Restrict ordering for a given shipping class, for a given country

drkskwlkr | PRO | 08/22/24 03:35:54 PM UTC (Edited) | 0 ⭐ | 522 👁️ | Never ⏰ | []
PHP |

1.5 KB

|

Source Code

|

0 👍

/

0 👎

add_action('woocommerce_before_single_product', function() {
    $restricted_class = 'restricted-netherlands';
    $user_country = WC_Geolocation::geolocate_ip()['country'] ?? '';
 
    global $product;
    $shipping_class_id = $product->get_shipping_class_id();
    $shipping_class = get_term_by('id', $shipping_class_id, 'product_shipping_class');
 
    if ($shipping_class && $shipping_class->slug === $restricted_class && $user_country === 'NL') {
        add_filter('woocommerce_get_price_html', '__return_false');
        add_filter('woocommerce_is_purchasable', '__return_false');
 
        add_action('woocommerce_single_product_summary', function() {
            echo '<p class="woocommerce-notice">' . esc_html__('We are sorry, this product is unavailable for order from your country.', 'geoip-filter-product') . '</p>';
        }, 25);
    }
}, 10);
 
add_filter('woocommerce_loop_add_to_cart_link', function($button, $product) {
    $restricted_class = 'restricted-netherlands';
    $user_country = WC_Geolocation::geolocate_ip()['country'] ?? '';
 
    $shipping_class_id = $product->get_shipping_class_id();
    $shipping_class = get_term_by('id', $shipping_class_id, 'product_shipping_class');
 
    if ($shipping_class && $shipping_class->slug === $restricted_class && $user_country === 'NL') {
        return '<p class="woocommerce-notice">' . esc_html__('We are sorry, this product is unavailable for order from your country.', 'geoip-filter-product') . '</p>';
    }
 
    return $button;
}, 10, 2);

Comments