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

时间:2018-12-10 09:51:20

标签: php wordpress woocommerce cart checkout

因此,我在结帐页面的“结算”部分中有一些自定义字段,我只想在购物车中有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 :(得分: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文件中。经过测试,可以正常工作。