SPAMで大変なことになっていたこのブログのコメントを@yagi_さんのAkismetプラグインをきっかけに整理してみた。とりあえず既存のSPAMを消すが大変だった。そもそもSPAM判定されようがされまいが、コメントがDBに投稿される数が多過ぎるので、
%form
:javascript
document.write('<input type="hidden" name="check" value="check" />')
と入れて、checkという値が無かったら404を返すようにした。SPAM BOTがJavascript を理解するかどうかというただそれだけだけど、今までは1日に数百個コメントSPAMが来るとかザラだったので大分違う気がします。何か他に簡単で99%ぐらいのスパムを弾ける方法があればいいなと思います。
Conditional Tagの追加
テーマを書くときに、今どのページなのか(カテゴリー別ページなのか、個別ページなのか等)を判断する関数をWordPressではConditional Tagと言うらしいです。@machidaさんからの要望で、個別ページ(entry?)の中でも投稿(Post)なのかページ(Page)なのかが一発で判断できるConditional Tagが欲しいと言っていたので追加しました。
%w[index search category tag yearly monthly daily post page entry entries].each do |name|
define_method("#{name}?") do
@theme_types.include?(name.to_sym)
end
end
post?とpage?というhelperを追加しただけです。
日本語のtruncate
何文字以上だったら"xxxxxxxxxxxxx..."みたいに縮めるtruncateが日本語文字列の途中でぶった切ってしまうのを直しました。微妙に気になってたんです。
def truncate(text, options = {})
options = {:length => 30, :ommision => '...'}.merge(options)
if options[:length] < text.split(//u).size
text.split(//u)[0, options[:length]].to_s + options[:ommision]
else
text
end
end
split(//u)で配列にして文字数を判断するようにしました。何か場当たり的な感じで怒られそうだけど・・・。