Wordpress

WordPressにおけるコメントコンテンツの前処理

このブログのコメントシステムが高速で機能豊富であることを確認するために、私は多大な努力を払ってきました。 このコメントシステムはAJAXベースなので、ページの更新を気にする必要はありません。 これらの作業は、コメントがシステムに登録された後に行います。 しかし、コメントが処理され、SPAMとしてマークされたり、スクラブされたりする前に、コメントの内容を変更したい場合はどうすればよいでしょうか? WordPressのフックを使えば、それも簡単です。

PHP

preprocess_comment フックを使うと、コメントが処理される前にコメントデータを取得することができます。 このフックを使って、`text` の文字列を <code> 要素で囲み、角文字を <pre> 要素でエンコードする方法を紹介します。

// Manage comment submissions
function preprocess_new_comment($commentdata) {
	// Replace `code` with <code>code</code>
	$commentdata['comment_content'] = preg_replace("/`(.*)`/Um", "<code>$1</code>", $commentdata['comment_content']);

	// Ensure that code inside pre's is allowed
	preg_match_all("/<pre(.*?)>(.*)<\/pre>/", $commentdata['comment_content'], $pre_matches); // $2
	foreach($pre_matches as $match) {
		$immediate_match = str_replace(array('<', '>'), array('<', '>'), $match[2]);
		$commentdata['comment_content'] = str_replace($match[2], $immediate_match, $commentdata['comment_content']);
	}

	// Return
	return $commentdata;
}
add_action('preprocess_comment', 'preprocess_new_comment');

このスニペットは、WordPressテーマの拡張機能として期待されているように、functions.phpに追加する必要があります。

私はWordPressのフックシステムが大好きです。CMSを信じられないほど強力でカスタマイズ可能にしてくれます。 また、このフックはWordPressのコメントスパムを防ぐためにも使っています。 また、多くのユーザーが私のコメントにHTMLコードを書き込むので、その角文字を適切にエンコードすることも重要です。 最終的には、ユーザーが何を投稿し、各サイトが何を受け入れるかはわかりません。

 

-Wordpress