【问题标题】:Getting billing country in WooCommerce fragment refresh在 WooCommerce 片段刷新中获取计费国家/地区
【发布时间】:2022-11-14 22:39:12
【问题描述】:

在 WooCommerce 中,我使用以下 JS 代码,在更改账单国家/地区时触发刷新片段:

jQuery(document).ready(function(){

    // Change Billing Country: Refresh WC Fragment
    jQuery(document.body).on('change', 'select[name=billing_country]', function(){
        jQuery(document.body).trigger('wc_fragment_refresh');
    });
    
});

这可以完美运行并运行以下 PHP 函数:

function wc_refresh_mini_cart_billing_country($fragments){
    ob_start();
    
    // Hidden code, works perfectly...

    // Get and output billing country
    $billing_country = WC()->customer->get_billing_country();
    echo $billing_country;

    // Update fragment
    $fragments['#your-billing-country'] = ob_get_clean();
    
    return $fragments;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_mini_cart_billing_country');

现在这可行,但我总是得到旧的计费国家,而不是当前的。例如:我在结帐页面上,国家设置为德国。如果我把它改成法国,上面的代码会显示“DE”(德国),再改成意大利后,上面的代码就会显示“FR”(法国)。所以它总是采用最后选择的国家,而不是当前选择的国家。

我错过了什么?

【问题讨论】:

    标签: woocommerce hook-woocommerce


    【解决方案1】:

    请修改您的 jQuery 代码并将其替换为以下代码:

    jQuery(document.body).on('change', 'select[name=billing_country]', function(){
        setTimeout(function() {jQuery(document.body).trigger('wc_fragment_refresh');},1000);
    });
    

    笔记:此外,另一种解决方案是使用 Ajax 功能并在 ajax 成功时运行“wc_frament_refresh”。

    【讨论】:

    • 我很高兴您的问题得到解决。谢谢你的评论。
    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2017-05-31
    相关资源
    最近更新 更多