RSS

WordPressのcomment_save_preフック

09 11月

Codexによると、フィルターフックの「comment_save_pre」は、

comment_save_pre フィルター関数引数: comment_post_ID、comment_author、comment_author_email、comment_author_url、comment_content、comment_type、user_IDのインデックスを含むコメントデータ配列 コメントを更新・編集する直前に、コメントデータに適用される。

とあるので、難しく考えていたが、何のことはない。

受け取るデータは、コメントの本文のみであり、コメントの本文を引数として渡してあげればOKだった。

以下の例は、preタグ内の記述を実体参照にエスケープする処理。

add_filter('comment_save_pre', 'wp_sh_escape_comment_updated');

function wp_sh_escape_comment_updated($content) {
global $wp_sh_setting_opt;
$match_num = preg_match_all('|<pre[^>]*?>.*?</pre>|is', $content, $match);
if ($match_num != 0 || $match_num != false) {
for ($i = 0; $i < $match_num; $i++) {
$code = preg_replace('|<pre[^>]*?>(.*?)</pre>|is', '$1', $match[0][$i]);
if (strpos($code, "<") !== false || strpos($code, ">") !== false || strpos($code, '"') !== false || strpos($code, "'") !== false || preg_match('/&[^(lt;)|(gt;)|(amp;)|(quot;)|(#039;)]/', $code)) {
$replaced_code = htmlspecialchars($code, ENT_QUOTES, 'UTF-8');
} else {
$replaced_code = $code;
}
$content = preg_replace('|'.preg_quote($code, '|').'|', $replaced_code, $content);
}
}
return $content;
}
広告
 
コメントする

投稿者: : 2011/11/09 投稿先 Knowledges

 

タグ:

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。