在AJAX请求上以编程方式更改WooCommerce货币

时间:2019-10-23 作者:FooBar

我正在添加自定义ajax_action 要获取产品并显示价格html(与我页面上其他地方的模板相同),问题是返回的价格不等于用户设置的当前价格。

在我的AJAX调用中,我尝试发送currency/wcmlc 作为POST/GET 参数,但这不起作用。

我还尝试了在网上可以找到的不同动作。

我认为问题在于过滤器wcml_client_currency 对AJAX请求无效,这是有问题的。

使用以下代码:

add_filter( \'wcml_client_currency\', function($current) {
    return \'DKK\';
} );
仍将返回EURO 关于AJAX请求/操作。

1 个回复
SO网友:FooBar

我就是这样解决的:

/**
 * Force currency change
 */

    add_filter( \'wcml_client_currency\', function($current) {
        if(isset($_GET[\'currency\']) && $_GET[\'currency\'])
            return $_GET[\'currency\'];

        if(isset($_POST[\'currency\']) && $_POST[\'currency\'])
            return $_POST[\'currency\'];

        return $current;
    } );
然后,为了监听上述过滤器,您必须添加以下代码:

add_action( \'wp_ajax_quick_view_single_product\', __NAMESPACE__ . \'\\\\quick_view_single_product\' );
add_action( \'wp_ajax_nopriv_quick_view_single_product\', __NAMESPACE__ . \'\\\\quick_view_single_product\' );

function quick_view_single_product() {

    wc_get_template(\'modal-single-product.php\');
    die();
}

/**
 * Ensure WCML\'s currency filters are listened to
 */

    add_filter( \'wcml_multi_currency_ajax_actions\', \'add_action_to_multi_currency_ajax\', 10, 1 );

    function add_action_to_multi_currency_ajax( $ajax_actions ) {
        $ajax_actions[] =  "quick_view_single_product"; // Add a AJAX action to the array.
        return $ajax_actions;
    }