Готовое решение(всё равно допиливать)
https://woocommerce.com/products/dynamic-pricing/
Еще вариант через dadata или geoip сервисы определять локейшн + отображать возможность смены (реферанс яндекс и множество магазинов), главное без поп-апа(лучше топбар)
Брать из куки ID города и в зависимости от этого
add_filter('woocommerce_get_sale_price', 'dynamic_price', 99, 2);
add_filter('woocommerce_get_price', 'dynamic_price', 99, 2);
function dynamic_price( $orginal_price, $product )
{
//писать город в куку(либо брать от сервиса
$city = $_COOKIE["city"];
//логика назначения стоимости в зависимости от города(лучше по регионам сделать) если много, то вынести в отдельный контроллер
switch ($city) {
case 'Moscow':
$new_price = round($orginal_price * 0.90); //Калькуляция стоимости, здесь 10% скидка
break;
default:
$new_price = $orginal_price
break;
}
//Или:
$new_price = get_post_meta( $product->ID, 'wc_price_'.$city, true ); //Получать цену как мета значение
//Если спец.цены нет, то отображать оригинальную
if( ! empty( $new_price ) ) {
return $orginal_price;
}
//Возвращаем новую стоимость
return $new_price;
}