当前位置: 首页 > 知识库问答 >
问题:

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

汪思博
2023-03-14

我这里有一个场景。

在我设置的WooCommerce商店中,产品类别'Bronx'是父类别,而'Baby Items Bronx'是它的子类别。这里的父类别名称布朗克斯是销售布朗克斯婴儿用品的城市。

另一个产品类别'Newark'是父类别,'Baby Items Newark'是它的子类别。在这里,父类别名称Newark是销售“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 );
    }


}

}

感谢您的帮助。

共有1个答案

余信然
2023-03-14

请尝试下面的代码片段。并用逻辑替换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');

我宁愿创建一个shipping类,并在条件为真时添加它,以便应用不同的运费
在“产品”类别中使用城市自定义字段也很容易。

 类似资料:
  • 在WooCommerce中,我试图显示一个基于定义的运输类更新的运输徽章。 我遇到的问题是,当我有一个变量产品,变量有不同的类。我需要根据选择更新徽章。 例如,当一个可变产品有一个单一和纸箱选项,而单一有一个10类,纸箱有一个大块1类时,我需要在纸箱从选项中选择时更新徽章。 我不知道如何获得变体装运类别,而不是单一产品装运类别。 以下是我取得的成绩:

  • 在woocommerce中,类别和产品是否可能有相同的基本url?目前,它给我的分类页面一个404,但产品运行良好。 我想做的是,两者都有基本的“商店”类别:demo。com/商店/类别/产品:演示。com/商店/类别/产品名称

  • 我不明白!!!我已经设法将产品类别描述包含在各自的页面中。我有6个类别,其中四个我需要添加一个描述。从四个人中,有三个人发挥了应有的作用。然而,其中有一个不仅显示了它的描述,还显示了另一个类别的描述。 每个类别有两个用于多种语言目的。但是你可以看到我需要添加描述的四个类别。 1-上衣2-下装3-一体式4-运动装 前三个起到了应有的作用。即。底部分类页面。 但第四,运动服不仅不断地展示它的描述,而且

  • 在我的WooCommerce网上商店的单一产品显示所有类别,它属于使用以下代码: 现在,我只想显示顶级父类别,而不想显示产品所属的子类别。 我试了很多,但似乎什么都不管用。有人对此有解决方案吗?

  • 我在一家Woocommerce商店工作,该商店的产品按父类别(如品牌、颜色、大小等)组织。这些顶级类别中的每一个都有许多子类别:例如,颜色的子类别包括红色、蓝色、粉色等。 客户希望在首页和归档页的网格/循环视图中,在每个产品缩略图下方显示每个产品的品牌和尺寸(产品是鞋)。 每个产品只有一个品牌,但可能有多种尺寸。 因此,本质上,我需要知道是否有一种方法可以只显示单个产品的特定子类别的标题,如下所示