我想在主页上弹出一个简单的模型,让用户在结帐/购物车页面之前选择他们的送货国家/地区。
我制作了一个小的选择框弹出模型,然后使用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> </strong>
答案 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函数:
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() ) {
限制脚本,仅限非登录/注册客户。