[WordPress] AJAX の問題上のワードプレスの get_option()

スポンサーリンク

質問

ワードプレスの

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 呼び出しの「左」を返します。

どのように地球上で、これは別に値を返すよりもデータベースし把握できない

明白な潜在的な問題:

  • Ajax は呼んでいる間違ったドメイン/サイト – しかしこれは起きていないプロジェクトでは、同じ、同じコードです。コードへの変更反映罰金 (、
    die($currency_pos)

    文字列を返します)

  • それが別のデータベースから引っ張って – プロジェクトと構成設定の 1 セットの 1 だけは (私は 1 プロジェクト WooCommerce である) 他の場所からこのデータを取得はほぼ不可能だ

この奇妙な問題かもしれない?

p. s.AJAX が

/wp-admin/admin-ajax.php

を通じて呼び出されます

これはフル機能は、クラスまたは何かの一部ではない

/**
 * 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);
}

答え

将来的にこの必要があります誰のためによく、.

Woocommerce 行で

get_option()

メソッドをオーバーライドします:

add_filter('option_woocommerce_currency_pos', array($this, 'filter_currency_position_option'));

し呼ぶ

filter_currency_position_option

このメソッドの最初の数行は:

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' ];

W T F

わかりましたので、AJAX の訪問のため、cookie に通貨記号の位置を格納.場合は、このことに同意することができますが、少なくとも今のところ私は知っているか確信がないです。

これは他の誰かを助ける希望

http://stackoverflow.com/questions/28086837/wordpress-get-option-on-ajax-issue

スポンサーリンク

Leave a Reply