我正在使用此代码在新窗口中打开所有外部链接(网站基于Wordpress):
/* OPEN ALL OUTBOUND LINKS IN NEW TAB */
function autoblank($text) {
$return = str_replace(\'href=\', \'target="_blank" href=\', $text);
$return = str_replace(\'target="_blank"
href="https://example.com\',
\'href="https://example.com\', $return);
$return = str_replace(\'target="_blank" href="#\', \'href="#\', $return);
$return = str_replace(\' target = "_blank">\', \'>\', $return);
return $return;
}
add_filter(\'the_content\', \'autoblank\');
add_filter(\'comment_text\', \'autoblank\');
不幸的是,它并不完美,因为它还可以在新窗口中打开内部链接(仅当这些链接放置在帖子或页面中时-菜单项等正常打开)。是否有人知道如何修改此代码以不在新窗口中打开内部链接?
SO网友:Jurgen Oldenburg
在WordPress中使用php实现这一点很复杂,我建议在前端使用一些jquery魔术来实现这一点。我编写了一个小小的jQuery插件,它可以在一个新窗口中打开所有外部链接(所有链接都具有当前站点以外的其他域名/主机名)。
查看插件:https://www.npmjs.com/package/jquery.jold.external-hrefs
手动执行此操作(不使用插件)也非常简单:
$(\'a\').each(function() {
/** Get the current hostname */
var a = new RegExp(\'/\' + window.location.host + \'/\');
/** Check if the href attribute of the link has a different hostname than the current site */
if( !a.test(this.href) ) {
$(this).on(\'click\', function(event) {
event.preventDefault();
event.stopPropagation();
/** Create an url object for the link */
url = new URL(this.href);
/**
* Check if the links is a http protocol link
* otherwise just open all other link protocols (tel, mailto)
*/
if (url.protocol == \'http:\' || url.protocol == \'https:\') {
window.open(this.href, \'_blank\');
} else {
window.location.replace(this.href);
}
});
}
}