2016-04-06 49 views
0

我一直在使用插件,並且此插件有一個自定義字段檢查,它似乎不起作用。在用於檢查具有特定條件的自定義字段的插件的代碼下方。preg_match():分隔符不能是字母數字或帶自定義字段檢查的反斜槓

<?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'。

現在我可能在這裏錯了,但我相信我沒有在這裏使用任何分隔符。這裏可能會出現什麼問題?

回答

0

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) 
... 
+0

當我讀到這我認爲它會起作用,可悲的是它不會。我相信有時wordpress中的一個自定義字段會返回'Array'。 preg_match()對陣列不起作用嗎? –

+0

該手冊聲明,它只返回1(找到),0(找不到)和FALSE(如果發生錯誤) – noreabu

+0

對我來說,一個錯誤發生,但未知原因。我想是因爲它是一個數組,但我可能是錯的。我已經聯繫了開發人員,並會在收到答案時進行更新。 –

相關問題