2015-01-22 3 views
0

Wordpress에서 get_option 메소드에 문제가 있습니다.AJAX에서 Wordpress get_option() 문제가 발생했습니다.

저는 WooCommerce 웹 사이트를 운영 중이며 currency symbol position은 "공백이있는 권리"로 설정되어 있습니다. wp_options 테이블에서 option_name "woocommerce_currency_pos"가 "right_space"로 올바르게 설정되었습니다.

정상적인 웹 사이트에서 제품을 볼 때 모두 정상적으로 작동하면 통화 코드가 오른쪽에 표시되고 옵션 값이 올바르게 반환됩니다.

그러나 문제는 작은 JS 함수를 사용하여 라이트 박스에 장바구니 (mini_cart.php)를 표시하고 반환되는 코드는 왼쪽에 통화 코드를 표시합니다.

디버깅 조금 후에 나는 여기에 방법 get_woocommerce_price_format 첫 번째 라인을 찾을 수 있습니다 : $currency_pos = get_option('woocommerce_currency_pos');

그래서이 옵션 테이블에서 언급 option_name의 가치를 얻을 수있는 단지 기본 기능입니다. 그러나 이것은 Ajax 호출에서 "left"를 반환합니다.

어떻게 지구상에서 나는이 값이 데이터베이스의 값과 다른 값을 반환하는지 알 수 없습니다.

명백한 잠재적 인 문제는 :

  • 아약스가 잘못된 도메인/웹 사이트를 호출 - 그러나 이런 일이되지 않으며, 동일한 프로젝트, 동일한 코드입니다. 코드에 대한 변경 사항은 괜찮습니다. (die($currency_pos)은 문자열을 반환합니다.)
  • 다른 데이터베이스에서 가져옵니다. 프로젝트 및 구성 설정 1 세트 만 있으므로 다른 곳에서이 데이터를 가져 오는 것이 거의 불가능합니다. WooCommerce와 함께 한 프로젝트가 있음).

무엇이 이상한 문제 일 수 있습니까?

p.s. 아약스는 미래에이 필요할 수 있습니다 사람을위한 클래스의 일부 또는 아무것도

/** 
* Get the price format depending on the currency position 
* 
* @return string 
*/ 
function get_woocommerce_price_format() 
{ 
    $currency_pos = get_option('woocommerce_currency_pos'); 

    switch ($currency_pos) { 
    case 'left' : 
     $format = '%1$s%2$s'; 
     break; 
    case 'right' : 
     $format = '%2$s%1$s'; 
     break; 
    case 'left_space' : 
     $format = '%1$s %2$s'; 
     break; 
    case 'right_space' : 
     $format = '%2$s %1$s'; 
     break; 
    } 

    //$format = '%2$s %1$s'; 

    return apply_filters('woocommerce_price_format', $format, $currency_pos); 
} 
+0

라이브에서 해당 문제를 볼 수 있습니까? –

+0

(un) 다행히도 사이트가 아직 게시되지 않았습니다. – Richard

+0

내가 볼 수있는 방법이 있습니까? –

답변

1

음, 아니다, 이것은 전체 기능입니다 /wp-admin/admin-ajax.php

를 통해이라고합니다. ,

function filter_currency_position_option($value){ 
    global $pagenow; 

    if((is_ajax() || ($pagenow == 'post-new.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'shop_order')) && isset($_COOKIE[ '_wcml_order_currency' ])){ 
     $currency_code = $_COOKIE[ '_wcml_order_currency' ]; 

WTF

좋아요 : 다음 filter_currency_position_option

이 방법의 처음 몇 줄

가 호출 add_filter('option_woocommerce_currency_pos', array($this, 'filter_currency_position_option'));

:

Woocommerce이 줄을 사용하여 get_option() 메소드를 오버라이드 (override) 그래서 AJAX 방문을위한 쿠키에 통화 위치를 저장합니다. 나는 이것에 동의 할 수있을 지 모르겠지만, 적어도 이제는 알고 있습니다.

다른 사람에게 도움이되기를 바랍니다.

관련 문제