你好@ninjaboi21:
我知道@curtismchale给了你一个jQuery解决方案,应该可以很好地工作。如果你想要一个PHP解决方案,这里有一个应该也适合你。
基本上,解决方案分为两部分;首先是使用PHP的ob_start()
函数,这很容易,然后在回调函数中解析输出,这是比较复杂的。我使用了一种不那么优雅的暴力方法;我相信有更好的方法,但暴力方法是像我这样不那么聪明的人所使用的。:)也许其他人会带来一些更优雅的东西。
这是代码;把这个放在你的主题中functions.php
文件,您应该准备好:
add_action(\'init\',\'buffer_output_for_links\');
function buffer_output_for_links() {
if (!is_admin()) // No need to do in the admin
ob_start(\'decorate_links\');
}
function decorate_links($content) {
$wpurl = get_bloginfo(\'wpurl\');
$parts = explode(\'<a\',$content);
for($index = 1; $index<count($parts); $index++) {
// Break apart on \'>\' to isolate anchor attributes
$part = explode(\'>\',$parts[$index]);
// Remove all target="_blank"
$part[0] = preg_replace("#\\\\s*target\\\\s*=\\\\s*[\\"\'].*?[\'\\"]\\\\s*#",\' \',$part[0]);
// Add target="_blank" to all
$part[0] = preg_replace(\'#href\\s*=\\s*#\',\'target="_blank" href=\',$part[0]);
// Remove target="_blank" from only this domain
$part[0] = preg_replace("#target=\\"_blank\\" href=([\'\\"]){$wpurl}#","href=\\\\1{$wpurl}",$part[0]);
// End this part by reassembling on the \'>\'
$parts[$index] = implode(\'>\',$part);
}
// Finally reassembling it all on the \'<a\' leaving a space for good measure
$content = implode(\'<a \',$parts);
return $content;
}
-迈克·辛克尔