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

如何从WooCommerce购物车中获取项目类别?

华英睿
2023-03-14

我写的函数应该检查是否有在购物车的项目,其中有一个特定的类别。

我的想法是:

add_filter( 'woocommerce_package_rates', 'remove_flat_rate_from_used_products', 10, 2 );

function remove_flat_rate_from_used_products($rates, $package) {
    if( is_woocommerce() && ( is_checkout() || is_cart() ) ) {
        if( check_whether_item_has_the_category() ) {
            unset( $rates['flat_rate'] );
        }
    }

    return $rates;
}

我猜,get_cart()函数将返回购物车的内容,我将能够从中获取有关商品类别的信息。我需要知道get_cart()返回数组的结构,所以我写了:

function check_whether_item_has_the_category() {
    global $woocommerce;

    var_dump(WC()->cart->get_cart());
}

得到

Warning: Invalid argument supplied for foreach() in ...wp-content\plugins\woocommerce\includes\class-wc-shipping.php on line 295

然后,我尝试在get_cart()函数的结果中查找类别名称:

function check_whether_item_has_the_category() {
    global $woocommerce;

    if( in_array('used', WC()->cart->get_cart()) ) {
        echo 'do something';
    }
}

得到了同样的错误。

使用$woocommerce而不是WC()不会产生任何效果,也不会删除global$woocommerce

我做错了什么?我如何获取项目类别(或检查它们是否存在特定类别)?

共有1个答案

汝臻
2023-03-14

变量$package还包含购物车内容($package['contents']),这是一个包含购物车中所有产品的数组。

因此,您可以循环查看单个产品是否具有所需的类别。要获取类别,您可以使用wp\u get\u post\u terms()

function remove_flat_rate_from_used_products($rates, $package) {

    // for each product in cart...
    foreach ($package['contents'] as $product) {
        // get product categories
        $product_cats = wp_get_post_terms( $product['product_id'], 'product_cat', array('fields' => 'names') );
        // if it has category_name unset flat rate
        if( in_array('category_name', $product_cats) ) {
            unset( $rates['flat_rate'] );
            break;
        }
    }

    return $rates;
}
 类似资料:
  • 问题内容: 我有上面的代码。 如果我在cart_item上运行print_r,我将得到一个多维数组: 我如何只获得product_id? 我试过$ test = 没用 问题答案: 要获取 foreach循环中的每个购物车商品(对于简单产品): 如果是可变产品,请获取 : 或在两种情况下 ( Woocommerce 3+中 的 Object在哪里) : 更新: 循环外使用产品ID 1)打破循环 (仅

  • 我在基于WooCommerce的网站上工作。我在里面有很多产品,所有产品都被分配到不同的产品类别。 现在,我有一个要求,完全删除一个类别的产品,如“woo猫”。 有许多自定义插件和主题,在其中有条件地使用该类别的id/slg,所以我决定不删除类别,该类别的产品或该类别的相关代码。 但我重定向每一个可能出现的URL到商店页面中的类别是包括 像我重定向-单页的产品,类别列表页,也隐藏从现场搜索等。。。

  • 问题在于当我的客户尝试从购物车中编辑一个产品时。因为所有产品都有相同的ID(我只有一个产品),所以添加到购物车的最后一个产品的元加载到文本字段中。我当前使用产品id检索中的元,但该id与购物车中的所有其他产品相同。有没有其他方法可以在不使用/(如或使用会话)的情况下检索元?

  • 问题内容: 我正在为wordpress创建一个自定义woocommerce集成主题。 我在顶部有一个Blob,用于显示购物车中的商品总数。我想使用Jquery更新此Blob(不重新加载页面),因此能够通过获取当前商品中的商品数量来增加商品数量blob,并为每次点击将其增加+1,问题是“添加到购物车”具有一个选项,可以选择要添加到购物车的商品数量。因此,如果我选择3个项目并单击按钮,则斑点仅增加1。

  • 问题内容: 我正在尝试使用以下功能更改购物车中的产品价格: 它在WooCommerce版本2.6.x中正常运行,但在版本3.0+中不再正常运行 如何使其在WooCommerce 3.0+版中正常工作? 谢谢。 问题答案: 更新 (2018年9月) 使用 WooCommerce 3.0+版本, 您需要: 要改用 钩子。 要改用WC_Cart 方法 改用WC_product 方法 这是代码: 该代码在

  • 所以我正在开发一个电子商务的WooCommerce,我正在通过函数手动添加一个产品。我获得add_to_cart(order_item_id)的返回值,并与其他一些值一起存储在一个自定义表中。 问题是,在支付网关中,我试图添加一个逻辑,并且需要从DB中获取这些信息,我试图获取WC()->cart->cart_contents,执行一个foreach并使用该键在自定义表中执行一个select,但该键