Wordpress 主题在链接上阻止 target="_blank"。如何为某些外部链接重新激活它?

Posted

技术标签:

【中文标题】Wordpress 主题在链接上阻止 target="_blank"。如何为某些外部链接重新激活它?【英文标题】:Wordpress theme blocks target="_blank" on links. How do I reactivate it for some external links? 【发布时间】:2019-08-17 18:16:35 【问题描述】:

我正在使用这个主题在 Wordpress 上建立一个摄影作品集网站:http://wpshower.com/themes/expositio/。主题多年没有更新,但仍然运行顺利。不过,我在将 target="_blank" 分配给某些外部链接时遇到了问题。该选项在那里,但它没有任何效果。

我已经寻求建议并尝试了解决问题的所有可用插件,最好的结果是在新选项卡和当前选项卡中打开外部链接。

我查看了所有主题文件,它们并不多,并认为这是一个 javascript 问题,我确定了以下代码。它处理移动菜单动画,但它是唯一提到的链接。 它也在类似的线程中讨论过:Wordpress navbar links using href="#" not working as a dummy link

$('a').on('click', function(e) 
                e.preventDefault();
                var _this = $(this);
                // close mobile menu if it's open, redirect otherwise
                if (_body.hasClass('toggled-on') && _this.parents('#page').length == 1
                    && _this.parents('#primary-navigation').length == 0
                ) 
                    load_effect.menuOff();
                 else 
                    load_effect.loader.show();
                    var href = $(this).attr('href');
                    $('.site').css('opacity', 0);
                    setTimeout(function() 
                        window.location = href;
                    , load_effect.duration);
                

最后,这是一个使用相同主题的网站,外部链接在新标签页中打开:http://www.tokyogoodidea.com/

对于解决这个小故障的任何建议,我将不胜感激。我对js一点也不擅长,不知道要改什么。

这是我的项目链接:http://one.clrblnd.com/ 提前致谢。

【问题讨论】:

【参考方案1】:

似乎没有可靠的方法在 Javascript 中打开新标签页(快速搜索表明这可能很棘手),而且代码确实看起来像是在阻止打开新页面。如果可行,您可能可以尝试。

首先在这一行之后

                var href = $(this).attr('href');

添加另一行说明(此行从标记中获取target 属性/属性的值,如果未定义则假定为_self

                var target = $(this).prop('target') || '_self';

然后寻找这一行

                $('.site').css('opacity', 0);

它的作用是使整个页面本质上是空白的。您可能想对此做一些事情,例如将其包装在 if 语句中,这样它就不会在 target="_blank" 时执行。修复它的一种快速方法是将其替换为

                target === '_blank' || $('.site').css('opacity', 0);

下一个替换(仅在上一个之后几行)

                    window.location = href;

                    window.open(href, target)

相应的块应该看起来像

                load_effect.loader.show();
                var href = $(this).attr('href');
                var target = $(this).prop('target') || '_self';
                target === '_blank' || $('.site').css('opacity', 0);
                setTimeout(function() 
                    window.open(href, target)
                , load_effect.duration);

这是假设 window.open 按预期工作(文档为 here)。代码中发生的情况是作者在单击链接后停止了默认行为

            e.preventDefault();

为了在浏览器继续加载预期页面之前完成一些精美的动画。但是,通过使用

简化页面加载
                    window.location = href;

它会忽略相应<a /> 标记的目标属性/属性。

【讨论】:

感谢@Jeffrey04 的回复!它有效,但出现了一个新问题。该链接确实在新选项卡中打开,但原始选项卡变为空白。 URL 保持不变,但内容消失并在刷新时重新出现。如果你点击link 主菜单上的 Instagram 链接,你就会明白我的意思了。 已编辑,但似乎仍无法解决您的问题,抱歉,我想目前只能提供帮助 可能还取决于您是否安装了弹出窗口阻止程序。认为某些浏览器内置了此功能。

以上是关于Wordpress 主题在链接上阻止 target="_blank"。如何为某些外部链接重新激活它?的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 阻止了我的主题的重要 API

在 wordpress 自定义主题索引上显示页面链接

标题中的Wordpress dynamic_sidebar阻止了主题其余部分的呈现

wordpress主题定制不反映在新域名上

Wordpress 主题中的相对图像链接

wordpress 不能在线安装主题