我有一個有條件的字段刪除程序,它可以很好地與ids一起工作,但是當我嘗試運行它時,它會在得到結果後停止。Foreach循環在找到單個項目後停止運行
我已經使用這個tutorial作爲引導線:
<?php
/*=============Conditional field remover===========*/
//Cart check
function wc_ninja_product_is_in_the_cart() {
/*p1 products*/
$p1_cat = array('metal', 'wood');
/*p2 products*/
$p2_cat = array('bubblewrap');
// Products currently in the cart
$cart_ids = array();
$cart_categories = array();
//Declaring var
$p1 = false;
$p2 = false;
//creating an array
foreach(WC()->cart->get_cart() as $cart_item_key => $values) {
$cart_product = $values['data'];
$cart_ids[] = $cart_product->id;
}
//filling array
foreach($cart_ids as $id) {
$products_categories = get_the_terms($id, 'product_cat');
}
//filling category
foreach ($products_categories as $products_category) {
//Check
if (in_array($products_category->slug, $p1_cat)) {
$p1 = true;//Result
}
if (in_array($products_category->slug, $p2_cat)) {
$p2 = true;//Result
}
$cart_categories[] = $products_category->slug;
}
//Returns result to function
return array($p1, $p2);
}
//Field Remover
function wc_ninja_remove_checkout_field($fields) {
//Gets value from function and places them in the array !PHP 7 reverses order!
list($p1, $p2) = wc_ninja_product_is_in_the_cart();
var_dump(wc_ninja_product_is_in_the_cart());
//If check came back false it will remove the field in question
if ($p1 == false) {
//removes Field domain name
unset($fields['billing']['Field_1']);
}
if ($p2 == false) {
//Removes Field office_emails
unset($fields['billing']['Field_2']);
}
//Return unset result
return $fields;
}
add_filter('woocommerce_checkout_fields' , 'wc_ninja_remove_checkout_field');
上面的代碼將導致只顯示Field_1
如果兩個乘積相加(在測試情況下,金屬盒貓=>金屬和填料材料cat => bubblewrap,我已經檢查了拼寫,其他的事情是數組var_dump給了我:[0] => string(5)「metal」
我試圖讓數組通過與一個i ++;它確實將位置更改爲[x],其中x是產品數量-1。as我之前提到我做了一個使用ID的版本,在大商店中工作正常並不實用,所以我知道工作返回數組工作正常。
我沒有按照教程點,並過早關閉了一個foreach循環導致只運行一次檢查。它應該是這樣的,但我有一個}上面//填充類別導致切斷循環。
foreach($cart_ids as $id) {
$products_categories = get_the_terms($id, 'product_cat');
//filling category
foreach ($products_categories as $products_category) {
小小的更新,現在它只比較數組中的最後一項,它將顯示數組中的所有項目,但只比較最後一項。我所做的只是把$ cart_categories [] = $ products_category-> slug;在填充數組foreach中如果 – Whisper
以上,你重寫var,使用數組而不是 –
Id檢查具有相同的行只是id而不是類別,我試着把它放在一個數組中,但仍然是相同的結果。 – Whisper