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)で配列にして文字数を判断するようにしました。何か場当たり的な感じで怒られそうだけど・・・。

Comments


Option