- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 functions.php 文件中,我需要能够设置送货方式(本网站只有一种方式),然后返回运费(设置了一些费用)。
我可以使用此查看 flat_rate
运费:
foreach (WC()->shipping->get_shipping_methods() as $key => $value){
echo $key;
}
所以它肯定存在。
基本上,我希望通过 API 调用返回运费。我已经路由了 API,并且一切正常。它调用了我在某处找到的这个函数,目前不记得了:
function pc_get_shipping(){
$ret = array();
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;
$ret[] = array('label' => $rate_label, 'total' => WC()->cart->get_cart_shipping_total());
}
}
return $ret;
}
但这只给了我一个空数组,可能是因为 WC()->session->get('shipping_for_package_0')['rates']
求值为一个空数组。
TL:DR
guest 客户送货信息通过 WC()->customer->set_shipping_address_1(wc_clean($value));
(所有值等)
使用 WC()->customer->get_shipping()
正确返回 guest 客户送货信息,因此我相信它设置正确。
送货方式 flat_rate
可通过 WC()->shipping->get_shipping_methods()
获得。
如何在 functions.php 中为当前订单设置送货方式,该方法将通过 REST API 调用。
如何在 functions.php 中通过 REST API 调用的方法获取当前订单的计算运费。
最佳答案
首先在您的 API 响应中,您应该需要在 WC_Session
中将成本值设置为自定义数据,使用类似 (where
$value 的响应来自您的 API 的成本值)
:
if( ! WC()->session->__isset( 'shipping_cost' ) && ! empty($value) ){
WC()->session->set( 'shipping_cost', $value );
}
you may need to ajax refresh checkout page using jQuery:
$('body').trigger('update_checkout');
然后你将使用这个钩子(Hook)函数:
add_filter('woocommerce_package_rates', 'shipping_cost_based_on_api', 12, 2);
function shipping_cost_based_on_api( $rates, $package ){
if( WC()->session->__isset( 'shipping_cost' ) ) {
// Loop through the shipping taxes array
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
if( 'flat_rate' === $rate->method_id ){
// Get the initial cost
$initial_cost = $new_cost = $rates[$rate_key]->cost;
// Get the new cost
$new_cost = WC()->session->get( 'shipping_cost' );
// Set the new cost
$rates[$rate_key]->cost = $new_cost;
// Taxes rate cost (if enabled)
$taxes = [];
// Loop through the shipping taxes array (as they can be many)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $rates[$rate_key]->taxes[$key] > 0 ){
// Get the initial tax cost
$initial_tax_cost = $new_tax_cost = $rates[$rate_key]->taxes[$key];
// Get the tax rate conversion
$tax_rate = $initial_tax_cost / $initial_cost;
// Set the new tax cost
$taxes[$key] = $new_cost * $tax_rate;
$has_taxes = true; // Enabling tax
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
}
return $rates;
}
// Enabling, disabling and refreshing session shipping methods data
add_action( 'woocommerce_checkout_update_order_review', 'refresh_shipping_methods', 10, 1 );
function refresh_shipping_methods( $post_data ){
$bool = true;
if ( WC()->session->__isset('shipping_cost' ) ) $bool = false;
// Mandatory to make it work with shipping methods
foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){
WC()->session->set( 'shipping_for_package_' . $package_key, $bool );
}
WC()->cart->calculate_shipping();
}
代码进入事件子主题(或事件主题)的 function.php 文件。它应该有效。
基于:Remove shipping cost if custom checkbox is checked in WooCommerce Checkout
关于php - Woocommerce 设置运输方式,获取运费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358370/
我有一个Rails应用程序,它的搜索系统取决于elasticsearch,我已经使用盆景插件将其推到heroku上,但是每当我尝试在我的应用程序上搜索内容时,都会在日志中给我这个错误。 2017-07
有什么方法可以禁用 Magento 中的购物卡/结账/送货选项吗? 我正在开发一个产品比较网站,其价格是从联属网站列出的。 我实际上并没有在我的网站上销售任何东西。 最佳答案 aDVo,如果禁用以下m
这是关于 iOS 设备蓝牙配件开发的指导请求。 公开可用的文档/讨论似乎有限;我认为这是由于 MFI NDA。 如果配件开发像一般的 iOS 开发一样易于访问,我没有找到我期望的 iOS 蓝牙配件的数
我有下一个问题: 我在名为的汽车的榻榻米中有一个水桶。 我在Elasticsearch中具有索引-名为测试 我映射了我的文档。 在 elasticsearch 配置中,我设置了: couchbase.
我遇到了 woocommerce 运输问题,这是我在购物车页面上遇到的错误。 Fatal error: Call to a member function get_label() on null in
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
您好,我正在使用 WooCommerce 为客户创建一个 wordpress 网站。该站点已完成,但客户希望能够从 shop_order 页面创建发货。我已经弄明白了大部分,问题是我对 UPS API
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
用户从桶中选择 1 到 {N} 个产品 对于每个产品,供应商提供 {N} 个报价 我想给用户机会告诉他 我想要的输出: 如果您从供应商 (A) 处购买 5 件产品的总成本为 87 美元 如果您从供应商
FedEx 运输 API 是否具有 SOAP 端点?我找不到 WSDL 端点。 最佳答案 自从这里的其他 2 个答案以来,他们的网站已经更改。 最直接的答案是他们没有经典的 WSDL 端点,您只需在其
我正在将 Nodejs UPS 运输 API 与我的网站集成。我正在使用this模块。我使用了取货API。但它抛出错误 Missing or invalid AccountNumber UPS 。添加
我是一名优秀的程序员,十分优秀!