Woocommerce 每件商品统一运费
我想以编程方式进行每种产品的发货。我不想使用这个插件。这似乎很容易:Woocommerce 每件商品统一运费,woocommerce,checkout,hook-woocommerce,Woocommerce,Checkout,Hook Woocommerce,我想以编程方式进行每种产品的发货。我不想使用这个插件。这似乎很容易: 为每个产品添加名为“发货价格”的元字段 挂钩到收银台,并根据购物车中的每个产品“发货价格”更新发货 我知道怎么做。但是关于实现#2?的最佳方法的任何想法都可以通过以下方式实现,使用get#u post\u meta获取meta字段“shipping\u price” 注1:为了测试该代码,添加了一行伪数据 注2:不要忘记指定$rate->method\u id function filter\u woodcommerce\u
我知道怎么做。但是关于实现#2?的最佳方法的任何想法都可以通过以下方式实现,使用
get#u post\u meta
获取meta字段“shipping\u price”
注1:为了测试该代码,添加了一行伪数据
注2:不要忘记指定$rate->method\u id
function filter\u woodcommerce\u package\u费率($rates,$package){
if(is_admin()&&!defined('DOING_AJAX'))返回;
//设置变量
$cost=0;
//循环浏览行项目
foreach($package['contents']作为$line\u项目){
//获取产品id
$product_id=$line_项目['product_id'];
//数量
$quantity=$line_项目['quantity'];
//获取后元
$shipping\u price=get\u post\u meta($product\u id,'shipping\u price',true);
//调试,出于测试目的,请稍后删除!!
$shipping_价格=10;
如果($shipping_price){
$cost+=$shipping\u price*$数量;
}
}
如果($cost>0){
//(多个)
foreach($rate作为$rate\u key=>$rate的费率){
//瞄准
if(在数组中($rate->method\u id,数组('free\u shipping','distance\u rate','table\u rate')){
//固定费率成本
$rates[$rate\u key]->cost=$cost;
}
}
//单身
//固定费率成本
//$rates['free_shipping']->cost=$cost;
}
返回美元汇率;
}
添加过滤器('woocommerce\u package\u rates','filter\u woocommerce\u package\u rates',100,2);
展开7uc1f3rs答案。我不得不稍加修改,使其与WooCommerce 3.0+的新方式配合使用
$rates[$rate_key]->cost = $cost;
需要
$rates[$rate_key]->set_cost($cost);
您可以使用中的函数获取$rates
function filter_woocommerce_package_rates( $rates, $package ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
// Set variable
$cost = 0;
// Loop through line items
foreach( $package['contents'] as $line_item ) {
// Get product id
$product_id = $line_item['product_id'];
// Quantity
$quantity = $line_item['quantity'];
// Get post meta
//$shipping_price = get_post_meta( $product_id, 'shipping_price', true);
// DEBUG, for testing purposes, REMOVE AFTERWARDS!!
$shipping_price = 10;
if ( $shipping_price ) {
$cost += $shipping_price * $quantity;
}
}
if ( $cost > 0 ) {
// (Multiple)
foreach ( $rates as $rate_key => $rate ) {
// Targeting
if ( in_array( $rate->method_id, array( 'free_shipping', 'flat_rate' ) ) ) {
// Set rate cost
// use functions from https://docs.woocommerce.com/wc-apidocs/class-WC_Shipping_Rate.html
$rates[$rate_key]->set_cost($cost);
}
}
// Single
// Set rate cost
//$rates['flat_rate:1']->set_cost($cost);
// use this to see your rates
//echo '<pre>'; print_r($rates); echo '</pre>';
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'filter_woocommerce_package_rates', 100, 2 );
function filter\u woodcommerce\u package\u费率($rates,$package){
if(is_admin()&&!defined('DOING_AJAX'))返回;
//设置变量
$cost=0;
//循环浏览行项目
foreach($package['contents']作为$line\u项目){
//获取产品id
$product_id=$line_项目['product_id'];
//数量
$quantity=$line_项目['quantity'];
//获取后元
//$shipping\u price=get\u post\u meta($product\u id,'shipping\u price',true);
//调试,出于测试目的,请稍后删除!!
$shipping_价格=10;
如果($shipping_price){
$cost+=$shipping\u price*$数量;
}
}
如果($cost>0){
//(多个)
foreach($rate作为$rate\u key=>$rate的费率){
//瞄准
如果(在数组中($rate->method\u id,数组('free\u shipping','flat\u rate')){
//固定费率成本
//使用来自的函数https://docs.woocommerce.com/wc-apidocs/class-WC_Shipping_Rate.html
$rates[$rate\u key]->设置成本($cost);
}
}
//单身
//固定费率成本
//$rates['flat_rate:1']->set_成本($cost);
//使用此项查看您的费率
//回显“”;打印($rates);回显“”;
}
返回美元汇率;
}
添加过滤器('woocommerce\u package\u rates','filter\u woocommerce\u package\u rates',100,2);
我已经回答了你的问题。为了在我的答案中给出一个合适的答案,而不提供多个选项,如果您可以使用步骤1中的代码更新您的问题,那将非常有趣。也许不是为了你自己,而是为了其他想用这个问题回答的用户,谢谢!这真的很接近。你的单费率成本是$费率['免费送货]->成本=$成本;需要$费率[‘固定费率:1']->固定成本($cost);事实上,我的回答考虑了几个选项,因为你的问题相当“广泛”。当做