首页 > 解决方案 > 为什么 has_term 不适用于 AND 运算符?

问题描述

我正在根据购物车中的现有类别在 WooCommerce 中使用多个条件执行特定操作:

if( (has_term( 'prestamos-empresa', 'product_cat', get_post( $product_id ))) && (has_term( 'productos-de-ahorro', 'product_cat', get_post( $product_id ))) ){            
               unset($fields['billing']['info_financiera']);
               unset($fields['billing']['billing_iban']); 
               unset($fields['billing']['billing_titularcuenta']); 
               unset($fields['billing']['billing_sinmoroso']);
               unset($fields['billing']['billing_cargorol']);
               unset($fields['billing']['billing_ingreso']);
               unset($fields['billing']['billing_tipocontrato']);
               unset($fields['billing']['billing_antiguedad']);
               unset($fields['billing']['billing_fechasueldo']);
            }

如果我使用 OR 运算符,如果它有效,也尝试 && 并且什么都没有。我将留下另一段代码:

    function campos_checkout_condicional( $fields ){        

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {        
        $product_id   = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );        

            // Si esta Micro Prestamos o Prestamos Personales en carrito devolver todos los campos.
            if( has_term( array('micro-prestamos','prestamos-personales'), 'product_cat', get_post( $product_id ) ) ){
                return $fields;
            }

            // Solo prestamos empresas y productos de ahorro en carrito.
            if( (has_term( 'prestamos-empresa', 'product_cat', get_post( $product_id ))) && (has_term( 'productos-de-ahorro', 'product_cat', get_post( $product_id ))) ){            
               unset($fields['billing']['info_financiera']);
               unset($fields['billing']['billing_iban']); 
               unset($fields['billing']['billing_titularcuenta']); 
               unset($fields['billing']['billing_sinmoroso']);
               unset($fields['billing']['billing_cargorol']);
               unset($fields['billing']['billing_ingreso']);
               unset($fields['billing']['billing_tipocontrato']);
               unset($fields['billing']['billing_antiguedad']);
               unset($fields['billing']['billing_fechasueldo']);
            }

            // Solo prestamos empresa e inversion // Solo productos de ahorro y inversion
            if( ((has_term( 'prestamos-empresa', 'product_cat', get_post( $product_id ))) && (has_term( 'inversion', 'product_cat', get_post( $product_id )))) || ((has_term( 'productos-de-ahorro', 'product_cat', get_post( $product_id ))) && (has_term( 'inversion', 'product_cat', get_post( $product_id )))) ){            
               unset($fields['billing']['info_financiera']);
               unset($fields['billing']['billing_iban']); 
               unset($fields['billing']['billing_titularcuenta']); 
               unset($fields['billing']['billing_sinmoroso']);
               unset($fields['billing']['billing_fechasueldo']);
            }
    }
}

编辑:实现完整的功能,使用 && 它不能按预期工作。例如:我希望如果只有两个特定类别做这样的动作(如果 category1 && category2)......

它怎么可能起作用?为什么它不起作用?谢谢

标签: phpwordpresswoocommerce

解决方案


使用&& 而不是AND布尔运算符。

使用|| 而不是OR布尔运算符。


推荐阅读