Допустим, что мы через форму принимаем какие-то объявления на сайте и хотим добавить валидацию плохих слов. Плохие слова мы будем хранить в общей базе вордпресса в опции с названием words_list. Для этого у себя в кастомном плагине добавьте опцию для внесения и хранения этих плохих слов. Пример:
<h4>Список запрещенных слов</h4> <textarea name="words_list" cols="100" rows="20" style="height:100px;"><?php echo $words_list; ?></textarea>
и дальше при сохранении настроек сохраняйте и эти данные в базу
if($_POST['words_hidden'] == 'Y') { $words_list = $_POST['words_list']; update_option('words_list', $words_list); } else { $words_list = get_option('words_list'); }
каждое слово сохраняем с новой строки
И вот после это всего начинаем заниматься нашей валидацией. В обработку добавляем функцию:
function check_bad_words($text1){ $words_black_list = explode("\n", get_option('words_list')); $words_black_list = array_map('trim', $words_black_list); $pattern = '~\b' . implode('\b|\b', $words_black_list) . '\b~u'; preg_match_all($pattern, preg_replace('~[.,?!]~', '', $text1), $matches); return count($matches[0]); }
и после этого добавляем кастомную валидацию на наше поле
add_filter( 'wpcf7_validate_textarea*', 'custom_textarea_validation_filter', 1, 2 ); function custom_textarea_validation_filter( $result, $tag ) { $tag = new WPCF7_Shortcode($tag); $result = (object)$result; $name = 'ob-text'; // тут пишем имя нашего текстового поля, которое собираемся валидировать if ( $name == $tag->name ) { $ob_text = isset( $_POST[$name] ) ? trim( wp_unslash( (string) $_POST[$name] ) ) : ''; if ( empty( $ob_text ) ) { $result->invalidate( $tag, "Вы не добавили текст объявления!" ); } if(check_bad_words($ob_text) > 0) { $result->invalidate( $tag, "Публикация недоступна. В тексте обнаружены запрещенные слова!" ); } } return $result; }
вот и все ) по желанию еще можно добавить отправку данных о юзере. который пытался эти слова добавить в обьяву