php - WooCommerce 根据帐单地址字段更改更新运输方式
问题描述
在我的在线商店中,有两种标准的送货方式——统一运费和免费送货。我添加了一个用于远程交付的插件。
因此,当客户在下订单时填写城市和地址字段时,必须添加新的运输方式。但是在我选择统一费率或免费送货之前,新的送货是不可见的。
据我了解,我没有根据字段的填写自动更新运输方式。
我找到并编辑了这段代码:
add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {
$('#billing_address_1').click(function(){
jQuery('body').trigger('update_checkout', { update_shipping_method: true });
});
});
</script>
<?php
}
}
但是,直到我第二次单击填写的字段,交付方式才更新。
我想与 AJAX 连接。如何编辑代码以便立即看到使用 AJAX 的结果,而无需再次单击填充的字段?
解决方案
目前,您必须click
在billing_address_1
字段上触发事件侦听器并更新您的字段,因为您的代码是这样说的!
有多种方法可以解决问题。例如click
,您可以添加不同的事件侦听器,而不是侦听事件。
首先,您可以监听 onchange
事件。当地址字段的值已更改并且用户单击/选项卡离开该billing_address_1
字段时,就会发生这种情况:
add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout()
{
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready($ => {
$('#billing_address_1').on('change', () => {
$('body').trigger('update_checkout', {
update_shipping_method: true
});
});
});
</script>
<?php
}
}
您可以在此处使用的另一个事件侦听器是input
事件侦听器。每次billing_address_1
更改字段的值时都会发生这种情况。即使按下space
键,backspace
键等也会触发。
add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout()
{
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready($ => {
$('#billing_address_1').on('input', () => {
$('body').trigger('update_checkout', {
update_shipping_method: true
});
});
});
</script>
<?php
}
}
另一个可能对这里有帮助的事件是 on blur
event。当用户点击/标签离开该billing_address_1
字段时,此事件将触发。这个事件和on事件的区别在于change
,当你监听这个事件时,即使billing_address_1
字段的值没有改变,也会发生更新。
add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout()
{
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready($ => {
$('#billing_address_1').on('blur', () => {
$('body').trigger('update_checkout', {
update_shipping_method: true
});
});
});
</script>
<?php
}
}
现在,根据您希望如何构建代码及其背后的逻辑,您可以同时使用这些事件:
add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout()
{
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready($ => {
$('#billing_address_1').on('change input blur', () => {
$('body').trigger('update_checkout', {
update_shipping_method: true
});
});
});
</script>
<?php
}
}
如何编辑代码以便立即看到使用 AJAX 的结果,而无需再次单击填充的字段?
我认为最后一个解决方案就是你要找的!一起使用所有这些事件侦听器将确保您的运输方式不断更新。
推荐阅读
- javascript - 赛普拉斯:拦截一条不存在的路线
- c++ - 不存在从 std::shared_ptr 到 std::shared_ptr 的合适的用户定义转换
- python - 如何在 Django 中一个类的多个函数之间共享一个变量?
- powershell - powershell-get-random-and-rename 该目录下的所有内容,包括子目录下的所有文件
- python - ML BoW:对单词变量的预测包的每个集群进行采样,以查看哪些单词最重复地聚集在一起
- arrays - 在 C 中使用 calloc() 和 free()
- javascript - 为什么 CSS 在某些路由上不起作用?
- python - 使用 django 获取 html 模板中特定变量的值
- javascript - ReferenceError:导出函数时未定义req
- pandas - 熊猫抓取数据框:必须通过二维输入。形状=(1, 21, 2)