【DW Question & Answer】禁止ワードを含む投稿の送信を拒否する

シンプルなので使いやすいDW Question & Answerですがスパム問題はつきものです。
BBpressはWordPressのディスカッション設定で禁止ワードを設定すれば連動していて楽なのですがDW Question & Answerは禁止ワード対策は自分でするしか無いのです。

いろいろと試行錯誤したのですが、シンプルにjavaScriptで禁止ワードが含まれていたらアラートで拒否する方法を。
下手にプラグインを入れて重くなるよりは良いと思います。
あとついでテキストエリアをシンプルに変えてます。


dw-question-answer\templates\question-submit-form.php
の11行目formの上辺りに以下を加えてみて下さい。
※ここでのtest(monmon)という関数はお好きなものに変えて下さい。

<script type="text/javascript">
var badWords = ["アホ","バカ"];
var regex = new RegExp(badWords.join("|"));
function test(monmon) {
if (monmon.match(regex) != null) {
alert("禁止文字が含まれています");
return false;
}
return true;
}
</script>


次にformにaction="javascript:alert('sumbit!')" onsubmit="return test(this.monmon.value)"を加えます

<form method="post" class="dwqa-content-edit-form" enctype="multipart/form-data">

<form method="post" action="javascript:alert('sumbit!')" onsubmit="return test(this.monmon.value)" class="dwqa-content-edit-form" >

次に禁止ワード対象となるフィールド(タイトルや本文)にid=monmonを加えます。ここでは本文を対象とします。
DW Question & Answerのテキストエリアをシンプルなテキストエリアに代えてます。

<p><?php dwqa_init_tinymce_editor( array( 'content' => $content, 'textarea_name' => 'question-content', 'id' => 'question-content monmon') ) ?></p>

を以下にまるっと変えてidに"monmon"をつけています。↓

<textarea rows="5" cols="100%" name="question-content" id="monmon" placeholder="最大800文字まで記入できます。" minlength='20' maxlength='800' required></textarea>

※pleceholderや文字数などはご自身で好きに変えて下さい。。

最後にsubmitに"submit" formaction="#"をつけます。以下に変えて下さい。
submitのコードは最後の方にあります

<input type="submit" formaction="#" name="dwqa-question-submit" value="<?php _e( 'Submit', 'dwqa' ) ?>" class="cp_btn">

とりあえずこれでテストすると下記のようにエラーが出ることを確認して下さい。
f:id:meijiro:20180930184355j:plain


以上です。
jsファイルを外部に設置したり禁止ワードを増やしたりカスタマイズ出来るかと思います。このままでも良いですが外部に設置することで別のページでもidにmonmonをつければ同じ動作ができるので便利だと思います。
あと、javaScriptの関数に-(ハイフン)が使えないので、くれぐれもDW Question & Answerのnameを使用せずに(なぜかnameには全て-を使っている!)新たにid="monmon"など別のものを設置して下さい。