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

时间:2017-02-27 12:43:34

标签: php jquery ajax wordpress woocommerce

我拥有一家餐厅,我正在开发一个在线订购食品的网站。我正在为网站使用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<select> 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;

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

请帮忙, 提前致谢

1 个答案:

答案 0 :(得分:0)

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

  1. 创建你的php文件,
  2. &#13;
    &#13;
    <select id = "address_cmbo" value =''>
     <option>query out the values from your database </option>
    </select>
    
    <input type="text" value = "" id="cost_textbox" > 
    &#13;
    &#13;
    &#13;

    1. 使用javascript / jquery创建一个函数,
    2. &#13;
      &#13;
         $("#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);
              },
      
          }); 
         }
      &#13;
      &#13;
      &#13;

      &#13;
      &#13;
       $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'];
      }
      &#13;
      &#13;
      &#13;

      1. 您的文本框的值现在将根据所选地址而改变。