php - Woocommerce 中基于州和产品类别的累进购物车项目费用
问题描述
最近我尝试在这个 Woocommerce 项目中使用 2 个 sniped 代码,我需要为特定产品类别(术语 ID:19)和特定国家/地区(佛罗里达州'FL')设置费用
此外,我需要将此费率乘以该产品类别中的项目 (19)。
这是我的实际代码:
add_action('woocommerce_cart_calculate_fees','woocommerce_custom_surcharge');
function woocommerce_custom_surcharge() {
$category_ID = '19';
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$state = array('FL');
foreach ($woocommerce->cart->cart_contents as $key => $values ) {
// Get the terms, i.e. category list using the ID of the product
$terms = get_the_terms( $values['product_id'], 'product_cat' );
// Because a product can have multiple categories, we need to iterate through the list of the products category for a match
foreach ($terms as $term)
{
// 19 is the ID of the category for which we want to remove the payment gateway
if($term->term_id == $category_ID){
$surcharge = 1;
if ( in_array( WC()->customer->shipping_state, $state && ) ) {
$woocommerce->cart->add_fee( 'State Tire Fee', $surcharge, true, '' );
}
}
如何根据特定类别的商品和特定州的客户设置累进费用?
任何帮助将不胜感激。
解决方案
有一些错误,您的代码有点过时......
下面的代码将根据特定产品类别和特定状态的购物车项目数量设置累进费用。
add_action( 'woocommerce_cart_calculate_fees', 'wc_custom_surcharge', 20, 1 );
function wc_custom_surcharge( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return; // Exit
## Your Settings (below) ##
$categories = array(19);
$targeted_states = array('FL');
$base_rate = 1;
$user_state = WC()->customer->get_shipping_state();
$user_state = empty($user_state) ? WC()->customer->get_billing_state() : $user_state;
$surcharge = 0; // Initializing
// If user is not from florida we exit
if ( ! in_array( $user_state, $targeted_states ) )
return; // Exit
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ){
// calculating fee based on the defined rate and on item quatinty
$surcharge += $cart_item['quantity'] * $base_rate;
}
}
// Applying the surcharge
if ( $surcharge > 0 ) {
$cart->add_fee( __("State Tire Fee", "woocommerce"), $surcharge, true );
}
}
代码进入function.php
您的活动子主题(或活动主题)的文件中。测试和工作。
推荐阅读
- javascript - this.state.names.map 不是函数
- javascript - 易受攻击的 JavaScript 库 jquery-1.7.1.js
- laravel - Laravel 懒惰收集海量数据
- python - 为什么即使它不为空,我也会收到“ValueError:NaTType 不支持 strftime”?
- c# - 将 JSON 从 T 更改为 List
- typescript - 错误:不变量失败:您不应该在外部使用
(故事书) - mongodb - 编写包含“聚合”的 MongoDB 查询时 WSO2 出错
- javascript - 从 AJAX 返回结果
- facebook - RestFB - 如何使用 RestFB API 将帖子发布到不同用户的页面
- java - 通过 HTTP 请求发送 JSON,但响应为 NULL