我想确保没有电子邮件地址发布在平原。所以我开发了一个插件,用spambot安全的替代品替换所有电子邮件地址。
但是一些用户将他们的电子邮件地址放在他们的博客标题中,在帖子循环之外。如何捕获和过滤这些信息?
这项工作:
add_filter(\'the_content\', array(&$this,"pep_replace"));
add_filter(\'the_excerpt\', array(&$this,"pep_replace_excerpt"));
add_filter(\'the_comments\', array(&$this,"pep_replace"));
这不会(它不会捕获我在test-theme header.php文件中添加的电子邮件地址)。
add_filter(\'template\', array(&$this,"pep_replace"));
add_filter(\'wp_head\', array(&$this,"pep_replace"));
add_filter(\'shutdown\', array(&$this,"pep_replace"));
我正在深入研究钩子文档,但我不知道什么是正确的过滤器钩子。感谢您抽出时间。
最合适的回答,由SO网友:EAMann 整理而成
你不能保护用户所做的一切。如果他们在主题的页脚/页眉/侧边栏中硬编码电子邮件地址,会怎么样?捕获和转义的唯一方法是使用输出缓冲。。。这可能会成为性能的噩梦。
我的建议是做两件事:
抓住所有有意义的地方提供了可访问的功能,允许人们逃离自己的内容您已经大致涵盖了步骤1。电子邮件地址最常出现在帖子内容中(the_content
和the_excerpt
) 但也可能出现在评论中。我还建议过滤侧栏小部件的标题和内容:
add_filter(\'the_title\', array(&$this,"pep_replace"));
add_filter(\'widget_content\', array(&$this,"pep_replace"));
对于步骤2,记录一个通用函数,人们可以使用该函数来清理他们的电子邮件地址:
function sanitize_email( $email ) {
// do stuff
return $sanitized_email;
}
然后,用户可以使用此选项,而不是对其电子邮件地址进行硬编码:
<p>Please contact me at <?php echo sanitize_email( \'[email protected]\' ); ?>.</p>
如果你还没有过滤
the_content
, 我建议您也创建一个短代码。。。但这有点多余。
Be very careful
您列出的其他三个挂钩实际上不是过滤器,它们是动作挂钩。它们是代码中可以挂接自己的逻辑方法的地方。与过滤器不同,它们不
return
PHP的任何内容。。。所以当用作过滤器时,它们是毫无意义的。