yutaka さんが、ちょっと前から頻繁にコメントが承認待ちになると言っていたので、原因を調べてみました。
実はこの現象、私のサイトでも WordPress 2.7 にバージョンアップしてから、たびたび発生していました。
# おもに yutaka さんのコメント。

ちらっと WordPress のソースを眺めたところ wp-includes/comment.phpcheck_comment() 関数に問題があることがわかりました。
具体的には :D などのいわゆる smilies がコメント中に複数あると、必ず「承認待ち」になってしまいます。
# WordPress 2.7.1 以降のバージョンではこのバグは解決されたため、このプラグインは不要です。

で、どこが悪いかと言うと

WordPress ではコメント内にn個のリンクが有る場合、コメントを「承認待ち」にする機能があります。
# デフォルトは2個以上のリンク。

このリンクを数える対象が WordPress 2.7 で微妙に変わってしまったのです。
ソースを見てもらえば分かりやすいのですが 2.6.5 までは "ユーザが入力した文字"、2.7からは "画面に表示する整形済みの html" に対してカウントしています。

WordPress 2.6.5 の wp-includes/comment.php

	if ( preg_match_all("|(href\t*?=\t*?['\"]?)?(https?:)?//|i", $comment, $out) >= get_option('comment_max_links') )
		return false; // Check # of external links

WordPress 2.7 の wp-includes/comment.php

	if ( get_option('comment_max_links') && preg_match_all("|(href\t*?=\t*?['\"]?)?(https?:)?//|i", apply_filters('comment_text', $comment), $out) >= get_option('comment_max_links') )
		return false; // Check # of external links

Custom Smilies などの smilies を入力するプラグインを導入している場合、ユーザが入力した smilies は<img src="http://example.com/wp-includes/images/smilies/icon_mrgreen.gif" 〜> などという img タグに変換されます。
で、この img タグの src プロパティの "http://example.com/wp-includes/images/smilies/icon_mrgreen.gif" もリンクとしてカウントされてしまうわけです。
結果「このコメントにはリンクがいっぱい含まれているからとりあえず「承認待ち」にしておきますよ」と WordPress が判定してしまいます。
お節介ですね。

これに対処するには wp-includes/comment.php を書き換えちゃえば良いんですが、WordPress コアのソースに手を付けるとバージョンアップの時とかメンドくさいです。
メンドくさいのは嫌いなので、簡単なプラグインを作りました。

<?php
/*
Plugin Name: Approved smilies for WP2.7+
Version: 0.1.1
Plugin URI: http://dogmap.jp/2009/01/08/wordpress-27-smilies-comment/
Description: コメント欄の笑顔を承認します
Author: wokamoto
Author URI: http://dogmap.jp/

License:
 Released under the GPL license

http://www.gnu.org/copyleft/gpl.html

*/
function convert_internal_link($html_text) {
	if (preg_match("|(href\t*?=\t*?['\"]?)?(https?:)?//|i", $html_text)) {
		$base_url = untrailingslashit(preg_replace('/^(https?:\/\/[^\/]*\/).*$/i', '$1', get_bloginfo('wpurl')));
		$pattern = '/(["\'])' . preg_quote($base_url, '/') . '(\/[^"\']*[^"\'])/i';
		$html_text = preg_replace($pattern, '$1$2', $html_text);
	}
	return ($html_text);
}
add_filter('comment_text', 'convert_internal_link', 99);
?>

ダウンロードはこちらから。
http://dl.getdropbox.com/u/110305/approved-smilies-0.1.1.zip

プラグインの仕様としては、内部リンクをプロトコル・サーバ名を含んだ絶対パスから、プロトコル・サーバ名を含まない相対パスに書き換えます。
例:
"http://example.com/wp-includes/images/smilies/icon_mrgreen.gif"

"/wp-includes/images/smilies/icon_mrgreen.gif"

これにより、同一サーバ上の URL へのリンクは check_comment() 関数では、リンクとしてカウントされないようになるので、結果として smilies がいくら含まれていようと「承認待ち」になることはありません。

トラックバック & ピンバック » 表示する

コメント

  • twitter 1970年1月1日 木曜日 9:00 AM

    ブログにエントリ: WordPress 2.7 で smilies 入りのコメントが承認待ちになる – yutakaさんが、ちょっと前から頻繁にコメントが承認待ちになると言っていたので、… http://tinyurl.com/7czeef [twicco.jp @w …

  • twitter 1970年1月1日 木曜日 9:00 AM

    bookmarked:
    WordPress 2.7 で smilies 入りのコメントが承認待ちになる : 独断と偏見の何でもレビュー
    http://tinyurl.com/7czeef
    tag:
    wordpress plugin
    をかもとさんが詳しく説明してくれています …

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月8日 木曜日 7:04 PM

    こんばんわ〜、わたしはこれで幸せになれました :oops:

    # おもに yutaka さんのコメント。

    わ、わるかったなぁ 8)

    これで煩わしさから解放されましたわ〜 :mrgreen:

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月8日 木曜日 7:25 PM

    私もコレで幸せになりましたー :D

    ほかのプラグインも順調にうごいてますです。

  • delicious 2009年1月8日 木曜日 7:27 PM

    をかもとさんが詳しく説明してくれています。プラグインもありがたく使わせていただいてます。

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月8日 木曜日 8:43 PM

    yutaka さん、satchin さん、どもです。

    幸せになった方が増えてなによりです。
    みんなで幸せになりましょう。

    と言うわけで Amazon で何か買うとき、たまに当ブログの Amazon リンク経由で買ってくれると私が幸せになります。
    去年は Amazon のおかげで、格安で忘年会ができました :P

  • JAPAN Mac OS Safari 2009年1月9日 金曜日 1:58 AM

    これはコアのバグと考えられるので、trac でチケットを切ってしまった方がいいと思いますよーー。

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月9日 金曜日 8:26 AM

    ゆりこさん、どもです。
    やっぱり、コアのバグと見るべきですかねぇ。
    今まで、無変更だった所を変更していたので 2.7からの仕様変更と受け取ったのですが…

  • UNITED STATES Windows Mozilla Firefox 2009年1月9日 金曜日 10:32 AM

    こんにちはー。

    # おもに yutaka さんのコメント。

    あはは、これ。私のブログもそうだったのかも(笑)
    なんでだろう?ま、いいか!
    ってな感じですでに忘れてました :)
    もう少し様子みてから、こちらの修正方法を参考にさせて頂きます.

  • JAPAN Windows Mozilla Firefox 2009年1月9日 金曜日 12:45 PM

    endunham さん、どもです。

    あはは、これ。私のブログもそうだったのかも(笑)
    なんでだろう?ま、いいか!
    ってな感じですでに忘れてました :)

    WordPress 2.7 にバージョンアップ後、yutaka さんのコメントだけ妙に「承認待ち」になるなぁとは思っていました。

  • UNITED STATES Windows Mozilla Firefox 2009年1月9日 金曜日 11:31 PM

    実は最後まで投稿を読まずに前回コメント投稿してました :oops:
    プラグインを頂きます。感謝!

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月9日 金曜日 11:57 PM

    endunham さん、どもです。

    どうぞ、どうぞ。好きなだけ持っていってください。

  • JAPAN Windows Mozilla Firefox 2009年1月30日 金曜日 9:36 AM

    comment.phpはいじりたくないけど、smiliesもやめたくないし、どうしょ…
    と思っていた所でした :(
    早速DLして使わせていただいております。
    ありがとうございました :D

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年1月30日 金曜日 11:31 AM

    mai さん、はじめまして。

    結構、この問題困ってる人が居るみたいですね。
    まぁ、コアのバグっぽいので、そのうち直るでしょう。
    このプラグインは、それまでの暫定的な処置ということで :P

  • JAPAN Ubuntu Linux Mozilla Firefox 2009年2月15日 日曜日 11:08 PM

    プラグインを導入しようか迷っていたのですが
    2.7.1でFIXされた
    http://core.trac.wordpress.org/ticket/8627
    でOKですよね?
    違うのかな :roll:

    WDJP 返信
  • JAPAN Ubuntu Linux Mozilla Firefox 2009年2月15日 日曜日 11:13 PM

    WDJP さん、はじめまして。

    プラグインを導入しようか迷っていたのですが
    2.7.1でFIXされた
    http://core.trac.wordpress.org/ticket/8627
    でOKですよね?

    おぉ、本当ですね。2.7.1 で FIX されてる。
    この問題と一緒です。
    では、2.7.1 からは、このプラグインは不要ですね。

  • hatena bookmark 2009年4月12日 日曜日 11:11 PM

    をかもとさんが詳しく説明してくれています。プラグインもありがたく使わせていただいてます。

  • hatena bookmark 2009年8月31日 月曜日 11:03 AM

    絵文字(のリンク)によるコメントの承認待ち回避

コメントする


Twitter ID を入力すると新しいコメントがあった際、 @dogmap_jp が、あなた宛に@リプライでお知らせします。

入力いただいたメールアドレスから、TwitterGravatar に登録されているアイコンを表示します。
(メールアドレスは公開されません)

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。

:mrgreen: :-P :-D :-) ;-) :-o :-| :-( 8-O :-? 8-) :twisted: :evil: :oops: :roll: :cry: :lol: :-x more »