2016-04-12 7 views
1

WPML Woocommerce多言語は、ユーザーの場所に応じて通貨の設定をサポートしていませんので、我々は我々自身のコードを作っ:私のコードはWooCommerce多通貨スイッチャーを壊し

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が、それはusermeta'テーブル'に設定しなければならない存在currency_、そしてそれはケースだ場合、あなたは関数を使用することができれば、私は考えています'$ user_ID = get_current_user_id();'で 'get_user_meta($ user_id、$ key、$ single);しかし、インターネットで同様の事例を検索して読むと、私はいつも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); 
関連する問題