WooCommerce:在价格函数中获取 $cart_item

WooCommerce: Get $cart_item in price function

我正在使用自定义函数来更改产品价格的样式。

这是我的实际功能:

add_filter( 'woocommerce_format_sale_price', function( $price, $regular_price, $sale_price ) {
    // stuff happens here
}, 10, 3 );

如果我想要产品的一些元字段,它在产品详细信息页面上工作正常。

如果我使用 global $product 并从那里开始,我可以获得这些元字段。

问题是,如果在 cart/checkout 页面上使用 global $product 会引发错误。

所以我正在使用 is_product()is_cart() 来检查我在哪里。

但我不知道如何从购物车中的产品中获取元字段。

我知道,我可以像 $product 一样使用 $cart_item。 但似乎无法将其与 global.

一起使用

有没有其他方法可以在上面的函数中获取购物车商品?

您可以使用 WC()->cart 获取购物车对象。然后你可以使用 $cart->get_cart() 循环它以获得 cart_item。试试下面的代码。

add_filter( 'woocommerce_format_sale_price', function( $price, $regular_price, $sale_price ) {
    if ( WC()->cart ) {
        $cart = WC()->cart; // Get cart
        if ( ! $cart->is_empty() ) {
            foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
                $product_id = $cart_item['product_id'];
                // stuff happens here
            }
        }
    }
}, 10, 3 );