就您定义的范围而言,这是一个定义正确过滤器的问题,尽管标题“管理出站链接”要宽得多。
针对您的范围:
a) 设置过滤器范围,例如“在发布内容中替换”:内容:请参阅http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content (但也可以查看bookmark\\u list、comment\\u text、get\\u comment\\u author\\u link、widget\\u text等其他地方进行筛选)
b) 定义正则表达式以搜索传出链接,例如:
const HTML_REF_REGEX2 = \'/<a(.*?)href=[\\\'"](.*?)[\\\'"](.*?)>(.*?)<\\\\/a>/i\';
c)从过滤器调用一个函数,该函数preg\\u replace\\u callback的找到的uri,例如
$r_content = preg_replace_callback(self::HTML_REF_REGEX2,
array($this,\'DoStuffToToUri\'), $content);
d)在DoStuffToUri中,可以对外部链接执行任何操作,例如:添加no follow、添加空白、在每个链接前面放置favicon等,并使用您添加的内容“重建”传出链接,例如:
return \'<a\' . $arrUrlMatches[1] . \'href="\' . $arrUrlMatches[2]
. \'"\' . $arrUrlMatches[3] .\'>\' . $arrUrlMatches[4] . \'</a>\';
但是。。。“管理外发链接”不仅仅意味着添加简单的过滤器:你需要一个所有外发链接的可浏览列表,包括HTTP状态返回和可能的重定向,它们在facebook链接、推特、google likes、pr、alexa评级等方面的价值,自动禁用404,调用它的位置,以便你可以单击和编辑外发url,等等。。。
p、 s.在验证传出链接时,您需要检查协议,因为可能会有很多拼写错误,例如:
if (!((substr($str_original_uri_uri,0,7) == \'http://\' ) ||
(substr($str_original_uri_uri,0,8) == \'https://\') ||
(substr($str_original_uri_uri,0,7) == \'file://\' ) )
)
{
return false;
}
以及传出链接“文本”区域内的内容(如果您想更改传出链接“内容”内的内容(可能是奇怪的内容),例如:
if (strstr(trim($str_original_uri_display_text), \'<\'))
{
return false;
}
您可能还想排除某些文件类型,例如:
$str_original_uri_type_extension
= EdlUtils::GetUriExtension($str_original_uri_uri, \'.\', 1, 1);
if ($str_original_uri_type_extension != false)
{
if (stristr($this->mStrNotAllowedExtensions,
$str_original_uri_type_extension) != false)
{
$bool_href_valid=false;
}
}
您可能还想记录被排除的内容,以便在需要时对其进行“更正”。
p、 p.s.替换代码位:http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-metadata.php