php WooCommerce产品类别和基于城市的运费

2fjabf4q  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(198)

在我设置的WooCommerce商店中,产品类别'Bronx'是父类别,'Baby Items Bronx'是它的子类别。这里父类别名称布朗克斯'Baby Items Bronx'下的产品销售的城市。
另一个产品类别'Newark'是父类别,'Baby Items Newark'是其子类别,其中父类别名称纽瓦克'Baby Items Newark'下产品的销售城市。
来自布朗克斯的客户正在尝试购买类别'Baby Items Newark'的产品。
我试图在WooCommerce中设置一个自定义运费,它可以根据客户的位置计算运费,并添加自定义送货费。我能够实现添加费用,如果客户选择城市为布朗克斯在账单地址与此代码。

function from_to_city_add_checkout_fee() {
    if (($_POST['city']=='Bronx')){
        WC()->cart->add_fee( 'Delivery Fee', 15 );
    }

现在,我需要一个函数,可以计算费用,如果客户是从布朗克斯,并试图购买的产品,这是列在父类别是'Newark'
我尝试了下面的代码,它不工作.

function from_to_city_add_checkout_fee() {
    if (($_POST['city']=='Bronx') && (has_term( array( 'baby-items-newark' ), 'product_cat' ))){
        WC()->cart->add_fee( 'Fee', 150 );
    }   
}

我试着用从https://businessbloomer.com/woocommerce-check-product-category-cart/中获得的代码片段来做类似的事情,它有助于检查购物车中的产品类别,但仍然不起作用。

add_action('woocommerce_before_cart', 'bbloomer_check_category_in_cart');
 
function bbloomer_check_category_in_cart() {
     
    // Set $cat_in_cart to false
    $cat_in_cart = false;
     
    // Loop through all products in the Cart        
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
     
        // If Cart has category "download", set $cat_in_cart to true
        if ( has_term( 'baby-items-newark', 'product_cat', $cart_item['product_id'] ) ) {
            $cat_in_cart = true;
            break;
        }
    }
       
    // Do something if category "download" is in the Cart      
    if ( $cat_in_cart == true) {
     
    // For example, print a notice
    // Or maybe run your own function...
    function from_to_city_add_checkout_fee() {
        if (($_POST['city']=='Bronx')){
            WC()->cart->add_fee( 'Delivery Fee', 150 );
        }
    
     
    }
     
}
qybjjes1

qybjjes11#

尝试这下面的代码片断.并且替换这if条件与你的逻辑.

add_action('woocommerce_cart_calculate_fees', 'woocommerce_custom_surcharge', 10, 1);
function woocommerce_custom_surcharge($cart)
{
    global $woocommerce;

    if (is_admin() && !defined('DOING_AJAX'))
        return;

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        if (
            $woocommerce->customer->get_shipping_city() == "Bronx" &&
            has_term('baby-items-newark', 'product_cat', $product->id)
        ) :
            WC()->cart->add_fee('Fee', 150);
        endif;
    }
}

您可以从以下位置获取父类别

$parentcats = get_ancestors($product_cat_id, 'product_cat');

我宁愿创建一个航运类,并添加它,如果条件是真的,这样一个不同的运费将适用。
此外,当您使用自定义字段为城市的产品比类别是很容易的。

相关问题