首页 文章

如果特定产品在Woocommerce的购物车中,则显示自定义结帐字段

提问于
浏览
1

所以我在结帐页面的结算部分有一些自定义字段,我只想显示ID为(603)的产品是否在购物车中 .

目前,如果购物车中的产品不是id 603,我的代码可以隐藏字段,但有一个问题是当我有603而另一个产品在购物车中取消了字段时,

如果603不在购物车中或者仅显示它们,那么隐藏字段的最佳方法是什么?

这是我正在使用的当前代码

function conditional_checkout_fields_products( $fields ) {
        $cart = WC()->cart->get_cart();

        foreach ( $cart as $item_key => $values ) {
            $product = $values['data'];

            if ( $product->id != 603 ) {
                unset( $fields['billing']['billing_prev_injuries'] );
                unset( $fields['billing']['billing_dogs_events'] );
                unset( $fields['billing']['billing_dogs_age'] );
                unset( $fields['billing']['billing_dogs_breed'] );
                unset( $fields['billing']['billing_dogs_name'] );
              }
        }

        return $fields;
    }
add_filter( 'woocommerce_checkout_fields', 'conditional_checkout_fields_products' );

1 回答

  • 0

    以下将完成这项工作:

    add_filter( 'woocommerce_checkout_fields', 'conditional_checkout_fields_products' );
    function conditional_checkout_fields_products( $fields ) {
        $is_in_cart = false;
    
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            if ( $cart_item['data']->get_id() == 603 ) {
                $is_in_cart = true;
                break;
            }
        }
    
        if ( ! $is_in_cart ) {
            unset( $fields['billing']['billing_prev_injuries'] );
            unset( $fields['billing']['billing_dogs_events'] );
            unset( $fields['billing']['billing_dogs_age'] );
            unset( $fields['billing']['billing_dogs_breed'] );
            unset( $fields['billing']['billing_dogs_name'] );
        }
    
        return $fields;
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .

相关问题