Тема Wordpress блокирует target = "_ blank" в ссылках.Как мне активировать его для некоторых внешних ссылок? - PullRequest
0 голосов
/ 27 марта 2019

Я создаю сайт портфолио фотографий на Wordpress, используя эту тему: http://wpshower.com/themes/expositio/.Тема не обновлялась годами, но все еще работает без сбоев.У меня проблема с назначением target = "_ blank" для некоторых внешних ссылок.Опция есть, но она никак не влияет.

Я искал совета и перепробовал каждый доступный плагин, который решает проблему, с наилучшим результатом - открытие внешней ссылки как в новой вкладке, так и в текущей вкладке.

I 'Мы просмотрели все файлы темы, их не так много, и, думая, что это проблема с JavaScript, я обнаружил следующий код.Он касается анимации мобильного меню, но это единственное упоминание о ссылках.Это также обсуждалось в аналогичной теме здесь: Ссылки WordPar Navbar с использованием href = "#" не работают как фиктивная ссылка

$('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 Ответ

0 голосов
/ 27 марта 2019

Похоже, что нет надежного способа открыть новую вкладку в 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 работает как положено (документация здесь ). Что происходит в коде, так это то, что автор остановил поведение по умолчанию после нажатия на ссылку с

            e.preventDefault();

, чтобы позволить некоторой причудливой анимации завершиться, прежде чем браузер продолжит загрузку нужной страницы. Однако, упрощая загрузку страницы с

                    window.location = href;

игнорирует целевой атрибут / свойство соответствующего тега <a />.

...