首先,在编辑产品时存储自定义字段。假设您正在使用custom\\u shipping\\u cost custom字段。确保其存储为数字,例如20,而不是20.00美元
然后,您需要在购物车页面上显示此字段。遗憾的是,没有用于在cart表中添加新列的筛选器,因此您需要编辑模板文件,或者如果不要求它是列,您可以改为这样做,此代码将向最后一列添加额外值:
add_filter(\'woocommerce_cart_item_subtotal\',\'additional_shipping_cost\',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
//Get the custom field value
$custom_shipping_cost = get_post_meta($post->ID, \'custom_shipping_cost\', true);
//Just for testing, you can remove this line
$custom_shipping_cost = 10;
//Check if we have a custom shipping cost, if so, display it below the item price
if ($custom_shipping_cost) {
return $subtotal.\'<br>+\'.woocommerce_price($custom_shipping_cost).\' Shipping Cost\';
} else {
return $subtotal;
}
}
这样,问题的第一部分就完成了。如果您想像上面的示例那样显示它,那么需要复制插件/woocommerce/模板/购物车/购物车。php文件到themes/yourtheme/woomerce/cart/cart。php。然后编辑文件,添加您自己的列,您可以使用上面的代码显示价格。
之后,我们需要用额外成本更新购物车总计。您的代码和add\\u费用很方便:
function woo_add_cart_fee() {
global $woocommerce;
$extra_shipping_cost = 0;
//Loop through the cart to find out the extra costs
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
//Get the product info
$_product = $values[\'data\'];
//Get the custom field value
$custom_shipping_cost = get_post_meta($_product->id, \'custom_shipping_cost\', true);
//Just for testing, you can remove this line
$custom_shipping_cost = 10;
//Adding together the extra costs
$extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
}
//Lets check if we actually have a fee, then add it
if ($extra_shipping_cost) {
$woocommerce->cart->add_fee( __(\'Shipping Cost\', \'woocommerce\'), $extra_shipping_cost );
}
}
add_action( \'woocommerce_before_calculate_totals\', \'woo_add_cart_fee\');
就是这样,这之后应该会起作用。确保删除仅用于测试的。。。这两个代码中的行,我没有在我的站点上创建用于测试的自定义字段。