在Woocommerce中使用AJAX更新会话变量

时间:2019-04-11 20:08:08

标签: php ajax wordpress woocommerce

我正在Woocommerce中开发一个函数,该函数通过WC () -> session-> get ('shipping_calculated_cost')接收变量,但是我想要的是,一旦钩子被激活,消息的价格就会通过{{1}刷新}函数。当前发生在我身上的是它使用了session变量的值,但是当我选择woocommerce_package_rates的下一个元素刷新第一个保存的值时会更新它。

例如,如果在dropdownlist中选择的值为10,它将存储该值但不显示它。当我选择另一个值时,它将显示先前选择的值,在这种情况下为10。

在此函数中,$cost的值是由$cost给出的数字,在这种情况下,我将值设置为10。此外,它具有要更新的活动dropdownlist

AJAX

此函数接收将存储在会话变量中的值。

function guardar_variable(){
  $costo = 10;
  WC()->session->set( 'shipping_calculated_cost', $costo );
  foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ):
      WC()->session->set( 'shipping_for_package_' . $package_key, false );
  endforeach;

  header('Content-type: application/json');
  echo json_encode($costo);
  die();
}

add_action('wp_ajax_nopriv_guardar_variable','guardar_variable',9);
add_action('wp_ajax_guardar_variable','guardar_variable',9);

在我的JS脚本中,有以下一行刷新页面。这样做会刷新2次。并且它不能被更新一次。这给我带来了一个问题,就是付款和运输负担的延迟。

add_filter( 'woocommerce_package_rates', 'adjust_shipping_rate', 11 );
function adjust_shipping_rate( $rates ){

  foreach ($rates as $rate):
      $cost = $rate->cost;
      $rate->cost = WC()->session->get( 'shipping_calculated_cost' );
  endforeach;

  return $rates;
}

0 个答案:

没有答案