Php 在WooCommerce中,每10个订单设置一个自定义运费
WP 5.3.3 我需要在订单创建后以编程方式更改运输成本 此代码不影响:Php 在WooCommerce中,每10个订单设置一个自定义运费,php,wordpress,woocommerce,hook-woocommerce,shipping,Php,Wordpress,Woocommerce,Hook Woocommerce,Shipping,WP 5.3.3 我需要在订单创建后以编程方式更改运输成本 此代码不影响: add_action('woocommerce_new_order', 'custom_shipping_costs', 1, 1); function custom_shipping_costs($order_id) { $order = wc_get_order($order_id); $shippingItems = (array) $order->get_items('shipping')
add_action('woocommerce_new_order', 'custom_shipping_costs', 1, 1);
function custom_shipping_costs($order_id)
{
$order = wc_get_order($order_id);
$shippingItems = (array) $order->get_items('shipping');
foreach ($shippingItems as $item) {
$item->cost = 0;
}
$order->save();
}
请帮帮忙
更新1:
add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates' );
function woocommerce_package_rates( $rates ) {
foreach($rates as $key => $rate ) {
$rates[$key]->cost = 10;
}
return $rates;
}
重要的是,我需要在每个第n个订单中更改装运价格。
大概是这样的:
if ($order_id % 10 == 0) {
// change shipping price for every 10-th order
}
更新2(解决方案):
add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates' );
function woocommerce_package_rates( $rates ) {
foreach($rates as $key => $rate ) {
$rates[$key]->cost = 10;
}
return $rates;
}
感谢@LoicTheAztec-解决方案基于以下内容,但有一些改动:
设置选项
->更新选项
set\u total\u tax
抛出一个错误,所以我对这部分做了一点修改()functions.php
文件中):
更改运输价格的简单方法如下:
add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates' );
function woocommerce_package_rates( $rates ) {
foreach($rates as $key => $rate ) {
$rates[$key]->cost = 10;
}
return $rates;
}
根据数量或总价添加条件语句(如适用)
add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates', 10, 2 );
function woocommerce_package_rates( $rates, $package ) {
$new_cost = ( WC()->cart->subtotal < 10 ) ? 4.5 : 2.5;
foreach($rates as $key => $rate ) {
$rates[$key]->cost = $new_cost;
}
return $rates;
}
add_filter('woocommerce_package_rates','woocommerce_package_rates',10,2);
功能商务套餐费率($rates,$package){
$new_成本=(WC()->购物车->小计<10)?4.5:2.5;
foreach($key=>$rate){
$rates[$key]->成本=$new_成本;
}
返回美元汇率;
}
首先,订单ID不是连续的,因为它们基于WoodPress页面、帖子和所有其他自定义帖子(如Woocommerce产品和优惠券)上使用的帖子ID。因此,我们需要对您的WooCommerce订单启用顺序计数,以便每10个订单进行一次更改
在将订单数据保存到数据库之前下订单时,以下内容将每10个订单的运输成本设置为零:
// Set a count based on placed orders for shipping items cost change
add_action( 'woocommerce_checkout_create_order', 'action_wc_checkout_create_order', 10, 2 );
function action_wc_checkout_create_order( $order, $data ) {
$orders_count = (int) get_option('wc_orders_count_for_shipping'); // get $order count for shipping item change
// Increase count for next order (starting count at 2 as this hook is triggered after shipping items hook)
set_option('wc_orders_count_for_shipping', $orders_count > 0 ? $orders_count + 1 : 2 );
}
// Set shipping cost to zero every 10-th orders when order is placed
add_action( 'woocommerce_checkout_create_order_shipping_item', 'action_wc_checkout_create_order_shipping_item', 10, 4 );
function action_wc_checkout_create_order_shipping_item( $item, $package_key, $package, $order ) {
$orders_count = (int) get_option('wc_orders_count_for_shipping');
// Every 10-th orders
if( $orders_count > 0 && ( $orders_count % 10 ) === 0 ) {
$item->set_total( '0' );
$item->set_taxes( [ 'total' => '0' ] );
$item->set_total_tax( '0' );
}
}
代码进入活动子主题(或活动主题)的functions.php文件。它应该有效。我们无意将现有答案复制/粘贴为答案,而是参考现有答案。&谢谢,但我需要更改每第n个订单的装运价格。在我的示例代码中,我将添加如下内容:
如果($order_id%10==0){//更改每10次订单的发货价格}
这就是我在问题“创建订单后”中注意到的原因。在你的例子中可能吗?也许我遗漏了什么…@7uc1f3r它从来没有复制粘贴的意图,我也没有。此外,我不知道是否有你强调的现有答案。我在我的一个项目中使用了相同的代码。无论如何,谢谢你。只要它能帮助提出问题的人。@LoicTheAztec请看一下“更新1”-这是关键逻辑。我相信在下订单后,当有实际订单时,我需要立即更改装运价格。明白……我已经回答了。谢谢,你的回答非常有用。我根据您的代码完成了我的原始问题和解决方案。