在结帐页面之前更新客户Woocommerce送货地址

时间:2017-08-30 18:10:34

标签: php jquery ajax wordpress woocommerce

我想在主页上弹出一个简单的模型,让用户在结帐/购物车页面之前选择他们的送货国家/地区。

我制作了一个小的选择框弹出模型,然后使用AJAX运行此功能,以便更改用户运送国家/地区但未更新。

//本地化

$(document).ready(function () {

    $('body').on('change', '.yo-lang-select', function () {

        var select = $(this);
        var value = select.val();
        $.ajax({
            url: akselect.ajax_url,
            method: 'POST',
            dataType: 'json',
            data: {
                action: 'get_the_defualt_lang',
                value: value
                nonce: akselect.nonce
            },
            success: function (respond) {
                console.log(respond);
            },
            error: function (jqXHR, textStatus, errorThrown) {

                console.log(jqXHR, textStatus, errorThrown);

            }
        });
    });

});

// ajax调用

add_action( 'wp_ajax_get_the_defualt_lang', 'get_the_defualt_lang' );
add_action( 'wp_ajax_nopriv_get_the_defualt_lang','get_the_defualt_lang' );

function get_the_defualt_lang() {

$lang = $_POST['value'];

add_action( 'woocommerce_add_to_cart', 'set_country_befor_cart_page' );
function set_country_befor_cart_page() {

    WC()->customer->set_country( $lang );
    WC()->customer->set_shipping_country( $lang );

}

$respond = $lang;

echo json_encode( $respond );


die();

}

//这是函数

<div data-effect="mfp-zoom-out" id="shop-pop_1" class="mfp-hide">
<select class="yo-lang-select" data-type="lang" title="">
    <option value="US">United States</option>
    <option value="GB">United Kingdom (UK)</option>
    <option value="US">Other Countries</option>

</select>

//弹出窗体

add_action( 'woocommerce_after_shop_loop', 'ak_store_popup' );

function ak_store_popup() {
  get_template_part( 'template-parts/popups/popup', 'store-main' );
}

//使用钩子将from插入商店页面

<strong>&nbsp;&nbsp;&nbsp;</strong>

1 个答案:

答案 0 :(得分:1)

  

更新:通过一些其他更改成功测试:

     
      
  • jQuery:当加载带有select字段的页面时,现在通过ajax设置'US'默认值。
  •   
  • 选择字段:只需要2个值(默认值为:'US'|另一个:'GB')。你可以添加很多其他的。
  •   
  • 现在正确设置了国家/地区(必须使用结算国家/地区)。
  •   

1)jQuery代码:

Wordpress与jQuery有一些特别之处,就是短片 $ 不起作用...所以要使它工作,你的jQuery代码需要从以下开始:的 jQuery(document).ready(function ($) {

jQuery(document).ready(function ($) {
    var select = $('.yo-lang-select'),
        value = select.val();

    function ajax_update( value ){
        $.ajax({
            url: akselect.ajax_url,
            method: 'POST',
            dataType: 'json',
            data: {
                action: 'get_the_defualt_lang',
                value: value
                //nonce: akselect.nonce
            },
            success: function (respond) {
                console.log(respond);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(jqXHR, textStatus, errorThrown);
            }
        });
    }

    ajax_update( value );

    $('body').on('change', select, function () {
        value = select.val();
        ajax_update( value );
    });
});

2)HTML Select字段:

<div data-effect="mfp-zoom-out" id="shop-pop_1" class="mfp-hide">
<select class="yo-lang-select" data-type="lang" title="">
    <option value="US">United States</option>
    <option value="GB">United Kingdom (UK)</option>
</select>

3)PHP函数:

  • 现在你得到了正确的答案,ajax工作正常。
  • 另一个问题是在你的php ajax脚本中嵌入set_country_befor_cart_page使用 woocommerce_add_to_cart 钩子函数,因为它永远不会运行,永远不会获得的值$lang 即可。
  • 我已经添加了结算国家/地区来真正设置国家/地区以便结帐...

所以只需这样使用它:

add_action( 'wp_ajax_get_the_defualt_lang', 'get_the_defualt_lang' );
add_action( 'wp_ajax_nopriv_get_the_defualt_lang','get_the_defualt_lang' );
function get_the_defualt_lang() {

    $lang = $_POST['value'];

    WC()->customer->set_country( $lang );
    WC()->customer->set_billing_country( $lang ); // Updated HERE Too
    WC()->customer->set_shipping_country( $lang );

    echo json_encode( $lang );

    die();
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

这次经过测试和运作。

  
      
  • 当您在弹出窗口中加载选择字段时,您可能需要在jQuery中进行一些讨论,以便处理此事件。
  •   
  • 您可能需要使用if ( ! is_user_logged_in() ) {限制脚本,仅限非登录/注册客户
  •