我一直在使用一个插件,这个插件有一个自定义字段检查,但似乎不起作用。下面是用于检查具有特定条件的自定义字段的插件代码。
<?php if ($custom_field_value != null) {
if (($set['condition']['value']['operator'] == 'is' && $set['condition']['value']['value'] == $custom_field_value)
|| ($set['condition']['value']['operator'] == 'is_not' && $set['condition']['value']['value'] != $custom_field_value)
|| ($set['condition']['value']['operator'] == 'contains' && preg_match($set['condition']['value']['value'], $custom_field_value)) //The problematic line.
|| ($set['condition']['value']['operator'] == 'does_not_contain' && !preg_match($set['condition']['value']['value'], $custom_field_value))
|| ($set['condition']['value']['operator'] == 'lt' && $set['condition']['value']['value'] < $custom_field_value)
|| ($set['condition']['value']['operator'] == 'le' && $set['condition']['value']['value'] <= $custom_field_value)
|| ($set['condition']['value']['operator'] == 'eq' && $set['condition']['value']['value'] == $custom_field_value)
|| ($set['condition']['value']['operator'] == 'ge' && $set['condition']['value']['value'] >= $custom_field_value)
|| ($set['condition']['value']['operator'] == 'gt' && $set['condition']['value']['value'] > $custom_field_value)) {
$proceed = true;
}
}?>
问题出现在"包含"行中,并在我的debug.log中给出以下错误:
PHP警告:preg_match():分隔符不能是字母数字或反斜杠
该检查用于检查自定义字段是否包含"30"、"text1"或"text2"。
现在我可能错了,但我相信我没有在这里使用任何分隔符。这里可能出了什么问题?
preg_match
期望参数按以下顺序排列:preg_match( $pattern, $string)
。此外,该模式需要例如前斜杠作为所述分隔符。因此,一个可能的解决方案是:
...
|| ($set['condition']['value']['operator'] == 'contains'
&& preg_match('/' . $custom_field_value . '/', $set['condition']['value']['value'] ))
|| ($set['condition']['value']['operator'] == 'does_not_contain'
&& !preg_match('/' . $custom_field_value . '/', $set['condition']['value']['value'] ))
...
如果你想做一个简单的检查,如果自定义字段中有一个字符串,出于性能原因,我建议使用strpos
:
...
|| ($set['condition']['value']['operator'] == 'contains'
&& strpos($set['condition']['value']['value'],$custom_field_value) > 0)
|| ($set['condition']['value']['operator'] == 'does_not_contain'
&& strpos($set['condition']['value']['value'],$custom_field_value) == FALSE)
...