在新窗口中打开所有外部链接-需要代码帮助

时间:2019-03-13 作者:kacper3355

我正在使用此代码在新窗口中打开所有外部链接(网站基于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\');
不幸的是,它并不完美,因为它还可以在新窗口中打开内部链接(仅当这些链接放置在帖子或页面中时-菜单项等正常打开)。是否有人知道如何修改此代码以不在新窗口中打开内部链接?

1 个回复
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);
            }

        });
    }

}

相关推荐

Wp/wp-admin/admin-ajax.php生成404

上周,我们的网站运行良好。今天,我无法在菜单中添加新页面。单击“添加到菜单”只会生成一个永不消失的旋转图标。如果我看一下Chrome控制台,我会看到:发布https://www.example.com/wp-admin/admin-ajax.php?_fs_blog_admin=true 404(未找到)没有限制/wp-admin 或/wp-admin/admin-ajax.php 在里面/.htaccess 或/wp-admin/.htaccess.我在google上搜索过这个问题,但大多数问题都是;