wordpress - Woocommerce 设置计费和运输信息
问题描述
更新 - 短版:
将使用什么方法将用户帐单/运输信息保存到会话以供客人结帐?
长版:
创建一个严重依赖于自定义 REST API 端点和 ajax 的自定义结帐页面。我WC()->checkout()->checkout_fields;
从一个电话中返回所有的计费和运输字段,将其呈现给用户以及所有这些。
我还通过 API 调用返回了计算出的运费。但是,这仅在设置用户地址时才有效 - 这是预期的。
我一生都无法弄清楚我可以在 API 中调用什么方法来保存用户账单和运输信息,以便我可以计算运输成本。现在我只能获取现有用户帐户的运输信息。即使只是一个手指在正确的方向上,也可以节省我剩下的头发。
一些代码
我如何收货(没有收货地址就无法工作,无法弄清楚如何设置帐单或送货信息)
function mytheme_get_shipping(){
foreach( WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate ){
if( WC()->session->get('chosen_shipping_methods')[0] == $method_id ){
$rate_label = $rate->label; // The shipping method label name
$rate_cost_excl_tax = floatval($rate->cost); // The cost excluding tax
// The taxes cost
$rate_taxes = 0;
foreach ($rate->taxes as $rate_tax)
$rate_taxes += floatval($rate_tax);
// The cost including tax
$rate_cost_incl_tax = $rate_cost_excl_tax + $rate_taxes;
return array('label' => $rate_label, 'total' => WC()->cart->get_cart_shipping_total());
}
}
}
解决方案
获取帐单和运输详细信息:
您可以获得如下所示的账单和运输详细信息。
//whole customer details
print_r(WC()->customer);
//billing details
$billing = WC()->customer->get_billing();
$billing_first_name = WC()->customer->get_billing_first_name();
$billing_last_name = WC()->customer->get_billing_last_name();
$billing_company = WC()->customer->get_billing_company();
$billing_address = WC()->customer->get_billing_address();
$billing_address_1 = WC()->customer->get_billing_address_1();
$billing_address_2 = WC()->customer->get_billing_address_2();
$billing_city = WC()->customer->get_billing_city();
$billing_state = WC()->customer->get_billing_state();
$billing_postcode = WC()->customer->get_billing_postcode();
$billing_country = WC()->customer->get_billing_country();
//shipping details
$shipping = WC()->customer->get_shipping();
$shipping_first_name = WC()->customer->get_shipping_first_name();
$shipping_last_name = WC()->customer->get_shipping_last_name();
$shipping_company = WC()->customer->get_shipping_company();
$shipping_address = WC()->customer->get_shipping_address();
$shipping_address_1 = WC()->customer->get_shipping_address_1();
$shipping_address_2 = WC()->customer->get_shipping_address_2();
$shipping_city = WC()->customer->get_shipping_city();
$shipping_state = WC()->customer->get_shipping_state();
$shipping_postcode = WC()->customer->get_shipping_postcode();
$shipping_country = WC()->customer->get_shipping_country();
设置帐单和运输详细信息:
您可以设置帐单和运输详细信息,如下所示。
//billing details
$billing_first_name = $_POST['billing_first_name'];
$billing_last_name = $_POST['billing_last_name'];
$billing_company = $_POST['billing_company'];
$billing_address_1 = $_POST['billing_address_1'];
$billing_address_2 = $_POST['billing_address_2'];
$billing_city = $_POST['billing_city'];
$billing_state = $_POST['billing_state'];
$billing_postcode = $_POST['billing_postcode'];
$billing_country = $_POST['billing_country'];
WC()->customer->set_billing_first_name(wc_clean( $billing_first_name ));
WC()->customer->set_billing_last_name(wc_clean( $billing_last_name ));
WC()->customer->set_billing_company(wc_clean( $billing_company ));
WC()->customer->set_billing_address_1(wc_clean( $billing_address_1 ));
WC()->customer->set_billing_address_2(wc_clean( $billing_address_2 ));
WC()->customer->set_billing_city(wc_clean( $billing_city ));
WC()->customer->set_billing_state(wc_clean( $billing_state ));
WC()->customer->set_billing_postcode(wc_clean( $billing_postcode ));
WC()->customer->set_billing_country(wc_clean( $billing_country ));
//shipping details
$shipping_first_name = $_POST['shipping_first_name'];
$shipping_last_name = $_POST['shipping_last_name'];
$shipping_company = $_POST['shipping_company'];
$shipping_address_1 = $_POST['shipping_address_1'];
$shipping_address_2 = $_POST['shipping_address_2'];
$shipping_city = $_POST['shipping_city'];
$shipping_state = $_POST['shipping_state'];
$shipping_postcode = $_POST['shipping_postcode'];
$shipping_country = $_POST['shipping_country'];
WC()->customer->set_shipping_first_name(wc_clean( $shipping_first_name ));
WC()->customer->set_shipping_last_name(wc_clean( $shipping_last_name ));
WC()->customer->set_shipping_company(wc_clean( $shipping_company ));
WC()->customer->set_shipping_address_1(wc_clean( $shipping_address_1 ));
WC()->customer->set_shipping_address_2(wc_clean( $shipping_address_2 ));
WC()->customer->set_shipping_city(wc_clean( $shipping_city ));
WC()->customer->set_shipping_state(wc_clean( $shipping_state ));
WC()->customer->set_shipping_postcode(wc_clean( $shipping_postcode ));
WC()->customer->set_shipping_country(wc_clean( $shipping_country ));
创建新客户并设置帐单和运输详细信息:
您可以创建新客户,设置帐单和运输详细信息,如下所示。
//create new customer
$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password'];
$user_id = wc_create_new_customer( $email, $username, $password );
//billing details
$billing_first_name = $_POST['billing_first_name'];
$billing_last_name = $_POST['billing_last_name'];
$billing_company = $_POST['billing_company'];
$billing_address_1 = $_POST['billing_address_1'];
$billing_address_2 = $_POST['billing_address_2'];
$billing_city = $_POST['billing_city'];
$billing_state = $_POST['billing_state'];
$billing_postcode = $_POST['billing_postcode'];
$billing_country = $_POST['billing_country'];
update_user_meta( $user_id, "billing_first_name", $billing_first_name );
update_user_meta( $user_id, "billing_last_name", $billing_last_name );
update_user_meta( $user_id, "billing_company", $billing_company );
update_user_meta( $user_id, "billing_address_1", $billing_address_1 );
update_user_meta( $user_id, "billing_address_2", $billing_address_2 );
update_user_meta( $user_id, "billing_city", $billing_city );
update_user_meta( $user_id, "billing_state", $billing_state );
update_user_meta( $user_id, "billing_postcode", $billing_postcode );
update_user_meta( $user_id, "billing_country", $billing_country );
//shipping details
$shipping_first_name = $_POST['shipping_first_name'];
$shipping_last_name = $_POST['shipping_last_name'];
$shipping_company = $_POST['shipping_company'];
$shipping_address_1 = $_POST['shipping_address_1'];
$shipping_address_2 = $_POST['shipping_address_2'];
$shipping_city = $_POST['shipping_city'];
$shipping_state = $_POST['shipping_state'];
$shipping_postcode = $_POST['shipping_postcode'];
$shipping_country = $_POST['shipping_country'];
update_user_meta( $user_id, "shipping_first_name", $shipping_first_name );
update_user_meta( $user_id, "shipping_last_name", $shipping_last_name );
update_user_meta( $user_id, "shipping_company", $shipping_company );
update_user_meta( $user_id, "shipping_address_1", $shipping_address_1 );
update_user_meta( $user_id, "shipping_address_2", $shipping_address_2 );
update_user_meta( $user_id, "shipping_city", $shipping_city );
update_user_meta( $user_id, "shipping_state", $shipping_state );
update_user_meta( $user_id, "shipping_postcode", $shipping_postcode );
update_user_meta( $user_id, "shipping_country", $shipping_country );
希望这可以帮助。
推荐阅读
- c - 以下 C 代码在 32 位机器中的输出将是什么..?
- apache-spark - 带有 hive 的 pyspark - 无法正确创建分区并从数据框中保存表
- android - 如何在确切的给定时间索引用不同颜色标记 SeekBar?
- rest - Google Cloud REST API - 如何返回比指定的creationTimestamp 更新的计算引擎图像?
- c# - 如何使用 python3 和 pythonnet 在 mydll.dll 中使用断点
- reactjs - 将 React SVG 组件渲染为 backgroundImage
- javascript - 触发器中使用通配符时部署云函数失败
- android - 减少卡片视图项目之间的差距
- ios - 如何防止事件被迅速发送到哨兵(iOS)
- vue.js - 如何修复'npm:无效的配置对象。Webpack 已使用与 API 模式不匹配的配置对象进行初始化。