2016-12-23 2 views
1

Я пытаюсь сравнить array1_ids с тележкой клиента, если продукты из массива соответствуют тем, которые находятся в поле корзины. X_name должно быть там, если не оно. должно исчезнуть. Я получаю значения из моей корзины и array1_ids, но когда я помещаю их через array_intersect, это приведет к тому, что NULL приведет к тому, что он всегда вернет true.Array_intersect возвращает NULL

Вот мой код:

function wc_ninja_product_is_in_the_cart() { 
/*array 1*/ 
$array1_ids = array('1', '3', '5');//field that should 
/*array 2*/ 
//$micro_ids = array('2', '4');//fields that shouldnt come back 

    // Products currently in the cart 
    $cart_ids = array(); 
    $cart_categories = array(); 

    // Find each product in the cart and add it to the $cart_ids array 
    foreach(WC()->cart->get_cart() as $cart_item_key => $values) { 
     $cart_product = $values['data']; 
     $cart_ids[] = $cart_product->id; 
    } 

    // If one of the special products are in the cart, return true. 
    if (! array_intersect($array1_ids, $cart_ids)) { 
     echo "true: " , implode(';',$cart_ids);;//bug fixing 
     return true; 
    } else { 
     return false; 
     echo "false: " , implode(';',$cart_ids);;//bug fixing 
    } 
} 
//Field Remover 
function wc_ninja_remove_checkout_field($fields) { 
    if (! wc_ninja_product_is_in_the_cart()) { 
     //removes Field x_name 
     unset($fields['billing']['x_name']); 
    } 
    return $fields; 
} 
add_filter('woocommerce_checkout_fields' , 'wc_ninja_remove_checkout_field'); 
+0

Вы уверены, что '$ card_ids' имеет элементы ? – Jerodev

+0

все возвращает значения, если вы не запускаете их через array_intersect() – user7329477

ответ

1

Это должно работать:

$hasSpecialProduct= false;  
foreach(WC()->cart->get_cart() as $cart_item_key => $values) { 
    $cart_product = $values['data']; 
    if (in_array($cart_product->id, $array1_ids)) { 
     $hasSpecialProduct = true; 
    } 
    $cart_ids[] = $cart_product->id; 
} 

// If one of the special products are in the cart, return true. 
if ($hasSpecialProduct) { 
    echo "true: " , implode(';',$cart_ids);;//bug fixing 
    return true; 
} else { 
    return false; 
} 

вы можете сделать последнюю часть короче:

return $hasSpecialProduct; 
+1

Спасибо, что это сработало! Я не могу повышать, так как я новичок в переполнении стека, но в любом случае спасибо. Я все равно принял ваш ответ. – user7329477

Смежные вопросы