2016-04-12 2 views
1

WPML WooCommerce Multilingual не поддерживает настройки валюты в зависимости от местоположения пользователя, таким образом, мы сделали наш собственный код:Мой код разбивает WooCommerce Multilingual валюты Switcher

function geoIPLocator() { 
global $woocommerce_wpml; 

$currency='EUR'; 
$geo=new WC_Geolocation(); 
$geo->init(); 
$country=$geo::geolocate_ip($geo::get_ip_address()); 

if(isset($_SESSION['locator'])) { 
    if($_SESSION['locator']['IP']= =$_SERVER['REMOTE_ADDR'] && strlen($_SESSION['locator']['IP' ])>0) { 
    $woocommerce_wpml->multi_currency_support->s et_client_currency($_SESSION['locator'][ 'currency']); 

    return; 
    } 
} 

if($country['country']=="RU" || $country['country']=="BY") { 
    $woocommerce_wpml->multi_currency_support->s et_client_currency('RUB'); 
    $currency='RUB'; 
} else { 
    $woocommerce_wpml->multi_currency_support->s et_client_currency('EUR'); 
    $currency='EUR'; 
} 

$_SESSION['locator']=array("IP" =>$_SERVER['REMOTE_ADDR'], "ISO"=>$country['country'], "currency"=>$currency); 
} 

add_action('init', 'geoIPLocator', 5); 

Проблема заключается в том, что она нарушает регулярный валютный коммутатор. Когда этот код включен, мы не можем переключать валюту на любой другой. Это потому, что мы не сохраняем или не проверяем, имеет ли пользователь уже определенную валюту, установленную для него (например, ручной переключатель)?

+0

Я не уверен, но я думаю, что если _user currency_ существует, то он должен быть установлен в 'usermeta' таблице, и если это так, то вы можете использовать функцию' get_user_meta ($ user_id, $ key, $ single); 'также с' $ user_ID = get_current_user_id(); '. Но при поиске и чтении о подобных случаях в Интернете я всегда попадаю на многовалютный коммутатор WPML, не решая проблемы. Группа поддержки WPML всегда говорит, что такие функции не поддерживаются, и они любезно перенаправляют людей на опытных разработчиков. – LoicTheAztec

ответ

0

Это исправляется код

function geoIPLocator() { 
    try { 
      global $woocommerce; 

      if (isset($woocommerce) && gettype($woocommerce) == 'object' && property_exists($woocommerce,'session') && gettype($woocommerce->session) == 'object' && property_exists($woocommerce->session,'get')) { 
        $manual_switch=$woocommerce->session->get('client_currency', null); 

        if ($manual_switch == null) { 

          global $woocommerce_wpml; 

          $currency='EUR'; 
          $geo=new WC_Geolocation(); 
          $geo->init(); 
          $country=$geo::geolocate_ip($geo::get_ip_address()); 


          if(isset($_SESSION['locator'])) { 
            if($_SESSION['locator']['IP']==$_SERVER['REMOTE_ADDR'] && strlen($_SESSION['locator']['IP'])>0) { 
              $woocommerce_wpml->multi_currency_support->set_client_currency($_SESSION['locator']['currency']); 

              return; 
            } 
          } 

      if($country['country']=="RU" || $country['country']=="BY") { 
        $woocommerce_wpml->multi_currency_support->set_client_currency('RUB'); 
        $currency='RUB'; 
      } 
      else { 
        $woocommerce_wpml->multi_currency_support->set_client_currency('EUR'); 
        $currency='EUR'; 
      } 

          $_SESSION['locator']=array("IP"=>$_SERVER['REMOTE_ADDR'], "ISO"=>$country['country'], "currency"=>$currency); 
        } 
      } 

    } catch (Exception $e) { 
      $e->getMessage(); 
    } 

} 

add_action('init', 'geoIPLocator', 5); 
Смежные вопросы