Проверка ключевых слов в форматах Gravity

В Gravity Forms я хотел бы включить небольшую проверку ключевых слов, которая проверяет сообщение пользователя на слова «spammy» и прекращает отправку записи администратору. Для этого скрытое поле изменяет его значение. У меня есть этот код, включенный в мои functions.php до сих пор

function strpos_arr($haystack, $needle) { if(!is_array($needle)) $needle = array($needle); foreach($needle as $what) { if(($pos = stripos($haystack, $what))!==false) return $pos; } return false; } /* * Our bad words validation function */ add_action('gform_pre_submission_1', 'keywords_check'); function keywords_check($validation_result){ $form = $validation_result["form"]; $stop_words = array( 'outsource', 'Madam', // this covers all variations of 'Sir/Madam' 'Sir /Madam' 'Sir/ Madam' 'Sir / Madam' etc 'SEO', 'long term relationship', ); $stop_id = array(); foreach($_POST as $id => $post) { if(strpos_arr($post, $stop_words)) { /* * We have a match so store the post ID so we can count it */ $stop_id[] = $id; } } if(sizeof($stop_id) > 0) { $validation_result['is_valid'] = false; $_POST['input_55'] = "No"; } } 

Кажется, что проблема с частью в самом начале этого кода, особенно с

 foreach($needle as $what) { if(($pos = stripos($haystack, $what))!==false) return $pos; } 

После отправки формы я получаю следующее предупреждение

 Warning: stripos() expects parameter 1 to be string, array given on line 109 

Перед тем, как задать этот вопрос, у меня есть несколько пробных ошибок php noob и ошибок. Может ли кто-нибудь помочь мне с этим?

Solutions Collecting From Web of "Проверка ключевых слов в форматах Gravity"

У меня есть плагин, который также будет обрабатывать это с помощью функции черного списка комментариев WordPress по умолчанию: https://gravitywiz.com/documentation/gravity-forms-comment-blacklist/

Проблема в функции strpos_arr . Если ваше плохое слово находится в $pos = 0 то вывод всегда будет false . Замените линию:

 if(($pos = stripos($haystack, $what))!==false) return $pos; 

с:

 if(($pos = stripos($haystack, $what))!==false) return true; 

Функция keywords_check может быть значительно упрощена благодаря использованию фильтра фильтрации полей Gravity Forms:

 function keywords_check( $result, $value, $form, $field ) { $stop_words = array( 'outsource', 'Madam', // this covers all variations of 'Sir/Madam' 'Sir /Madam' 'Sir/ Madam' 'Sir / Madam' etc 'SEO', 'long term relationship', ); if ( strpos_arr( $value, $stop_words ) ) { $result['is_valid'] = false; $result['message'] = 'Illegal words entered'; } return $result; } add_filter( 'gform_field_validation_2_4', 'keywords_check', 10, 4 ); 

Обратите внимание на два числа в названии «hook» в этом примере. 2 – идентификатор формы, 4 – идентификатор поля. Настройте эти цифры в соответствии с вашей формой.