うちでリクエスト受付用に設置しているフォームですが、
これはdemocracyというWordPressのプラグインです。
Democracy AJAX Poll at Jalenack
インストール後にウィジェットとして追加することでサイドバーに設置したり、
あるいはページに関数書いて設置したりできます。
AJAXなのでシームレスに結果を見たり投票したりできて便利なのですが、
管理画面が英語だったり、項目追加の際の重複チェックが無かったりするので、
ちょこっと改造してみました。
↓やったこと
- 日本語化
- 項目追加機能の強化
1. democracyを日本語化する
democracyのソースファイルは一応そのままでもある程度国際化されてるので、
あとは日本語翻訳ファイルを用意すればよい…はずでしたが、
load_plugin_textdomainが宣言されてないのでdemocracy.phpに追記が必要でした。
democracy/democracy.php 10行目 + if(function_exists('load_plugin_textdomain')) load_plugin_textdomain('democracy','wp-content/plugins/democracy');
まずこれを追記します。
次に言語ファイルをdemocracyのディレクトリに設置します。
moファイルとpoファイルをここに置いておきますのでDLしてください。
解凍してdemocracyディレクトリへアップロードすればOKです。
※バグかもですが、ウィジェットとして使用時に「結果を見る」などで表示を切り替えると
日本語化されてる箇所が英語に戻ってしまったりするので、class.phpファイルの該当箇所を
直接日本語に書き換えてしまうとよいかもしれません。
2. 項目追加機能の強化
項目を自由に追加できる設定のとき、全く同じ文言でも追加できてしまったりするので
その場合は既にある方へ投票扱いにしたかったのと、NGワード機能が欲しかったので追加しました。
democracy/class.php 258行目 + if (!$answer) return false; 297行目 - $wpdb->query("INSERT INTO {$table_prefix}democracyA VALUES ('', {$this->id}, '{$new_answer}', 0, 1)"); - return $wpdb->insert_id; + $polled = $wpdb->get_row("SELECT * FROM `wp_democracyA` WHERE answer = '".$new_answer."'"); $ng_list = @fopen(get_option('siteurl').'/wp-content/plugins/democracy/ng_list.csv',"r"); if($ng_list){ while($d = fgets($ng_list)){ $d = split(",",$d); $mcnt = 0; foreach($d as $t){ $nans = strtoupper(mb_convert_kana($new_answer,"KVaC")); $t = strtoupper(mb_convert_kana(trim($t),"KVaC")); if(ereg($t,$nans)){ $mcnt++; } } if($mcnt==count($d)){$ng_flag=true;} } } if($ng_flag){ echo '<div style="color:#FF0000;text-align:center;">'.$new_answer.'は投票できません。</div>'; return false; }elseif($new_answer!=$polled->answer){ $wpdb->query("INSERT INTO {$table_prefix}democracyA VALUES ('', {$this->id}, '{$new_answer}', 0, 1)"); return $wpdb->insert_id; }else{ return $polled->aid; }
NGワード設定は、democracyのディレクトリにng_list.csvというファイル名で
CSVファイルを作成して設定します。
ng_list.csvのフォーマットは以下になります。
文字コードはWordPressの設定に合わせてください。
(文字コードチェックはしてないです)
democracy/ng_list.csv
いぬ
とり
ねこ,かわいい
neko2
WANKO
NGワードに指定したい文字列を一行ずつ書いていきます。
これらの文字列を含む単語は、追加できなくなります。
2単語以上を含んだ時にNGにしたい場合は、同じ行にカンマ(,)で区切って指定します。
例えば上の指定の場合、以下のようになります。
- いぬ → ×
- イヌ → ×
- わんこ → ○
- とり → ×
- トリ → ×
- こいぬ → ×
- にとり → ×
- ねこ → ○
- かわいい → ○
- ねこはかわいい → ×
- Neko2 → ×
- wanko → ×
どうしても追加して欲しくない単語がある場合は
これで制限することが出来ます。
ひらがな・カタカナや英字大小の区別が付いてますので、
逐次追加してください。
追記:ひらがな、カタカナ(全角半角)は区別しないようにしました。
英数字も全角半角区別しません。英字の大小も区別しません。
なお、ng_list.csvは用意しなくても問題なく動作します。
NGワードを指定したい時だけ作成すればよいです。
以上、備忘録も兼ねて記録しておくことにしました。
1位になったらわたしが四女かさげぽんを踏む絵を描きますよハハハ
byあやな