我正在使用wordpress页面的过滤器,我在尝试使用多个值时遇到了麻烦。
这个想法是使用布尔值来显示或不显示项目。每个项目使用ACF来获取各种字段,在这种情况下是颜色。
if( isset($colores) ){
foreach($colores as $color){
if( in_array ( $color, get_field( 'color', get_the_ID() ) ) ){//Matches the filter
$pasaColor = true;
}else if($color == null){//Not specified in the filter
$pasaColor= true;
}else{//doesn't match the filter
$pasaColor= false;
}
}
}
如果$colores
只有一个元素,则可行:
(
[0] => yellow
)
我将它与每个项目的值进行比较:
(
[0] => yellow
[1] => red
[2] => blue
)
结果为:$pasaColor=true
(
[1] => red
[2] => blue
)
这导致:$pasaColor=false
但是如果过滤器提供多个元素,则只有最后一个元素保持为真。
过滤器:
(
[0] => yellow
[1] => azul
)
项目1:
(
[0] => yellow
[1] => red
[2] => pink
)
这导致$pasaColor=false
项目2:
(
[0] => blue
[1] => red
[2] => pink
)
这导致$pasaColor=true
在item1中,我得到的结果意味着在实际包含值“yellow”的数组中找不到值“yellow”。
虽然我们在这里,有没有更简单的方法来做到这一点?
答案 0 :(得分:0)
我发现了问题。在foreach上的每个cicle上,我的布尔值都会被覆盖,所以最后就像只检查了最后一个元素。
我添加了另一个布尔值来防止这种情况。
if( isset($colores) ){
foreach($colores as $color){
if( in_array ( $color, get_field( 'color', get_the_ID() ) ) ){//Matches the filter
$pasaColor = true;
$itempasa = true;
}else if($color == null){//Not specified in the filter
$pasaColor= true;
$itempasa = true;
}else if($itempasa==false){//doesn't match the filter
$pasaColor= false;
$itempasa = false;
}
}
}
如前所述,如果有人知道更好的处理方法请分享,我会非常感激。