Настройка кнопок ADD TO CART в зависимости от страны пользователя и идентификаторов продуктов

В моем магазине WooCommerce есть некоторые товары, которые доступны только в США. Я хочу скрыть кнопку «Добавить в корзину» на странице одного товара, когда геолокация найдет любую страну, кроме США.

Если это США, показать «добавить в корзину», если это не США, скрыть кнопку «Добавить в корзину».

(P.S. Я использовал для этого плагин, но он не работает для некоторых конфликтов javascript с другими плагинами.)

1

Решение

Когда условия совпадают (конкретные идентификаторы продуктов и другие страны), этот код заменит кнопки добавления в корзину в архивах магазинов ссылкой на продукт, а на отдельных страницах продукта — пользовательским текстом.

Вам просто нужно установить:

  • 1-й функции нужного кода страны … (для вас «США» и уже сделано)
  • 2-й и 3-й функции идентификаторы вашего продукта в массиве

Вот код:

// Conditional function country code detection
// @argument $code (string): country code restriction
// @return boolean
if( ! function_exists('is_from_country_code') ){

// ==> HERE below set your country code (Replace 'US' by yours)
function is_from_country_code( $code = 'US' ){
$location = new WC_Geolocation;
$user_ip = $location->get_ip_address();
$user_country_code = $location->geolocate_ip( $user_ip, false, false )['country'];
return $user_country_code == $code ? true : false;
}
}

// Replace "Add to cart" single product button and quantity by a custom text
add_action( 'woocommerce_single_product_summary', 'Custom_single_add_to_cart', 1 );
function Custom_single_add_to_cart(){
global $product;

// Set here your product IDS
$product_ids = array( 56, 53, 50 );

if( is_from_country_code() ||
( ! is_from_country_code() && ! in_array( $product->get_id(), $product_ids) ) )
return; // Continue for foreign countries and the specific products IDs

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
add_action('woocommerce_single_product_summary', function(){
echo '<p class="custom-text">'.__('Not available for your country', 'woocommerce').'</p>';
}, 30);
}

// Shop and archives pages: we replace the button add to cart by a link to the product
add_filter( 'woocommerce_loop_add_to_cart_link', 'custom_text_replace_button', 10, 2 );
function custom_text_replace_button( $button, $product  ) {

// Set here your product IDS
$product_ids = array( 56, 53, 50 );

if( is_from_country_code() ||
( ! is_from_country_code() && ! in_array( $product->get_id(), $product_ids) ) )
return $button; // Continue for foreign countries and the specific products IDs

$button_text = __("View product", "woocommerce");
return '<a class="button" href="'.$product->get_permalink().'">'.$button_text.'</a>';
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код протестирован на версии woocommerce 3+ и работает

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]