我创建了一个改编自forum post的foreach循环。
但它在第一次迭代后总是停止。
为什么会这样?
应该检查$ field是否与$ skip数组中的任何内容不匹配,然后运行一些代码。但代码只在第一个循环上运行然后退出。
function bg_calculation_save ( $pieces ) {
$skip = array('company_name', 'logo', 'screenshot', 'highlight_1', 'highlight_2', 'highlight_3', 'awards');
foreach ($pieces[ 'fields' ] as $field => $value) {
if (!in_array($field, $skip)) {
// Calculate the points
$points = bg_calculate_points($field) * bg_score_weights($field);
// Set the value of the "$field_points" field
$pieces[ 'fields' ][ $field . '_points' ][ 'value' ] = $points;
//If the field isn't being saved right now, add it to the list to be saved
if (!in_array( $pieces[ 'fields_active' ])) {
$pieces[ 'fields_active' ][] = $field;
}
return $pieces;
}
}
}
add_filter( 'pods_api_pre_save_pod_item_vpn', 'bg_calculation_save' );
答案 0 :(得分:1)
将return $pieces;
移到foreach循环之外。
答案 1 :(得分:0)
如果你要执行命令,如果找到$ field,我认为你的情况应该是
if (in_array($field, $skip))
根据您的情况
if (!in_array($field, $skip))
如果在第一个循环中它不在数组中,则条件为真,它执行语句并返回。因此,循环只执行一次。
如果您要遍历所有$ field,如果它不是in_array,则应删除return语句。