2017-04-14 4 views
0

私は自分のカスタムWooCommerceサイトで関数を作成しました。これはフロントエンドでうまく動作しますが、wp-adminは中断します。 Wp-adminはhttp-500エラーを表示します。ワードプレス関数がwp-adminを破る

これは、関数である:

// Set currency based on visitor country 

function geo_client_currency($client_currency) { 
     $country = WC()->customer->get_shipping_country(); 
      switch ($country) { 
      case 'GB': return 'GBP'; break; 
      default: return 'EUR'; break; 
     } 

} 
add_filter('wcml_client_currency','geo_client_currency'); 

私は真でWP-デバッグを設定して、それがこのメッセージをスローします:

Fatal error: Uncaught Error: Call to a member function get_shipping_country() on null in 

は、だから、と何かを持っている:$国= WC() - >顧客 - > get_shipping_country();私はそれを見つけることができません。 誰かがこれを手伝ってくれるかもしれません。

ありがとうございました。

+1

'WC()'は何も返しません。そのプロパティは 'customer'です。 – Sirko

+0

意味があります。しかし、この関数を編集してフロントエンドとバックエンドで動作するようにするにはどうすればよいですか? – quinox

+0

PHP関数なので、フロントエンドで動作するようになると問題に遭遇します。その 'WC()'関数は実際に何を返しますか? – Sirko

答えて

0

customerプロパティは、バックエンドのWC_Customerのインスタンスに設定されていないため、get_shipping_country()メソッドを呼び出すことはできません。

チェックcustomerは、使用する前にnull(デフォルト)ではありません。

function geo_client_currency($client_currency) { 
    if (WC()->customer) { 
     $country = WC()->customer->get_shipping_country(); 

     /** 
     * Assuming more are going to be added otherwise a switch is overkill. 
     * Short example: $client_currency = ('GB' === $country) ? 'GBP' : 'EUR'; 
     */ 
     switch ($country) { 
      case 'GB': 
       $client_currency = 'GBP'; 
       break; 

      default: 
       $client_currency = 'EUR'; 
     } 
    } 

    return $client_currency; 
} 
add_filter('wcml_client_currency', 'geo_client_currency'); 
+0

ありがとうございました。問題を解決しました!! – quinox

関連する問題