woocommerce - 根据地址字段更新运费

Posted

技术标签:

【中文标题】woocommerce - 根据地址字段更新运费【英文标题】:woocommerce - update shipping rate based on address field 【发布时间】:2017-02-27 12:43:34 【问题描述】:

我拥有一家餐厅,我正在为其开发一个在线订餐网站。我正在为网站使用 woocommerce。

由于我们只能向城市内的有限区域送货,我已将地址行 2 自定义为一个下拉列表,其中包含我们可送货的区域。

我已经做了这么多。

现在我需要的是,根据从下拉列表中选择的区域更新运费。

我对 wordpress 和 php 非常陌生,因此非常感谢您详细解释的答案。

提前致谢

编辑:

我做了一些研究,找到了一种更新运费的方法

add_action( 'woocommerce_flat_rate_shipping_add_rate','add_another_custom_flat_rate', 10, 2 );

function add_another_custom_flat_rate( $method, $rate ) 
$new_rate          = $rate;
$new_rate['cost']  = 50; // Update the cost to 50
$method->add_rate( $new_rate );

但我仍然不知道如何在此函数中获取区域名称,我尝试使用 $fields['billing']['billing_address_2'] 来引用它,但这不起作用。

如果有人能帮我在该函数中获取地址行 2,那将非常有帮助。

TIA

编辑 2: 我已经根据我的需要修改了一个代码,现在,我没有使用 DB 来获取下拉值,而只是对它们进行硬编码。由于这是 wordpress,这些字段已经存在,我只能使用它们。下面是我正在使用的稍微修改过的 jQuery,我将它保存在我的子主题中作为 updateshipping.js:

<script>
$("#billing_address_2").change(function () 
/* ajax function */
var area =  $("#billing_address_2").val();

$.ajax(
    url: 'functions.php',
    method: 'POST',
    data:  field1: area ,
    contentType: 'application/json; charset=UTF-8',
    success: function (response) 
        alert(response.status);
        $("#order_review").val(response);
    ,

); 

</script>

billing_address_2&lt;select&gt; id

order_review是我需要刷新的div id

我也在functions.php中排队js,如下所示:

add_action( 'wp_enqueue_scripts', 'update_shipping' );

function update_shipping() 

wp_register_script( 'updateshipping', get_stylesheet_directory_uri(). '/updateshipping.js',array('jquery') );
wp_enqueue_script( 'updateshipping' );

  

目前,我在上面给出的 add_another_custom_flat_rate 函数中添加了这一行:

$area = $_REQUEST['area'];
echo $area;

但由于某种原因,该区域没有被获取。是不是我做错了什么?

请帮忙, 提前致谢

【问题讨论】:

可能使用内置的shipping zones 问题是,内置的运输区域只使用对我没有太大帮助的 PIN 码 【参考方案1】:

您可以使用 ajax/javascript 来解决您的问题,

    创建您的 php 文件,

<select id = "address_cmbo" value =''>
 <option>query out the values from your database </option>
</select>

<input type="text" value = "" id="cost_textbox" > 
    使用 javascript/jquery 创建函数,

   $("#address_cmbo").change(function () 
            
    /* ajax function */
    
    var address =  $("#address_cmbo").val();

    $.ajax(
        url: 'functions.php',
        type: 'POST',
        data:  field1: address ,
        contentType: 'application/json; charset=utf-8',
        success: function (response) 
            alert(response.status);
            $("#cost_textbox").val(response);
        ,

    ); 
   

 $address_value =   $_REQUEST['address'];
 $query = "Select cost from tbl_address ";
 $result = mysql_query($query);

 while( -> mysql_fetch_array) 
---  display the actual cost from the result
 $cost =  $rows['cost'];
    您的文本框的值现在将根据所选地址而改变。

【讨论】:

您好,谢谢您的帮助,但我仍然没有得到输出,我可能做错了什么,我已经根据进度对问题进行了编辑。可以的话请帮忙,谢谢

以上是关于woocommerce - 根据地址字段更新运费的主要内容,如果未能解决你的问题,请参考以下文章

text 根据购物车小计更改woocommerce运费

在 WooCommerce 中更改订单运费总额

根据运输类别和商品数量添加 Woocommerce 费用

在产品页面上显示运费 - WooCommerce

添加更新或删除 WooCommerce 运输订单项目

WooCommerce Admin创建订单并在订单支付上添加运费