i have been working plugin , plugin has custom field check doesn't seem work. below code of plugin used check custom field condition.
<?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; } }?>
the problem lies within 'contains' line , give following error in debug.log :
php warning: preg_match(): delimiter must not alphanumeric or backslash
the check used check if custom field contains either '30', 'text1' or 'text2'.
now wrong here believe not using delimiter here. possibly go wrong here?
preg_match
expects paremeters in order: preg_match( $pattern, $string)
. pattern needs e.g. forward slashes said delimiters. possible solution be:
... || ($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'] )) ...
if want simple check, if string inside custom field suggest using strpos
performance reasons:
... || ($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) ...
Comments
Post a Comment