Вопрос или проблема
У меня есть меню заголовка на сайте (сделано редактированием темы), но я заметил, что пользовательские ссылки, указывающие на локальный якорь (например, #section), правильно перемещают по той же странице к желаемому месту, но внешняя ссылка не работает, даже если указать “открыть в новой вкладке”. Я предполагаю, что что-то мешает открыть ссылку в меню, или, что еще хуже, внешняя ссылка не поддерживается в этой теме. Поскольку я новичок, где мне искать поведение открытия пункта меню/ссылки? Будет ли легко изменить такое поведение?
HTML элемента меню следующий:
<li id="menu-item-812" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-812 level-0"><a class="menu-item-href" href="#societa"><span class="line_wrap"><span class="line"></span>L’Agenzia</span></a></li>
<a class="menu-item-href" href="#societa"><span class="line_wrap"><span class="line"></span>L’Agenzia</span></a>
Если я создаю внешнюю ссылку, то она такая же, URL идет как www.google.com (например) в href.
Решено, я вручную добавил класс “external” к ссылке меню, как предложено здесь https://github.com/ChrisWojcik/single-page-nav/issues/1
На самом деле это не сработало, проблема все еще в том, что страница предназначена для одностраничной навигации, что мешает открытию внешней ссылки, потому что я думаю, что плавное перемещение к разделу также не закодировано для управления внешней ссылкой.
Ответ или решение
Проблемы с открытием внешних ссылок в меню: Решение
Ваша проблема заключается в том, что внешние ссылки в меню не работают должным образом. Как вы отметили, ссылки на локальные якоря (например, #section
) функционируют корректно и ведут пользователя к нужному разделу страницы. Однако, когда вы пытаетесь использовать внешние ссылки (например, www.google.com
), они не открываются. Давайте разберем возможные причины и решения этой проблемы.
Причины проблемы
-
Скрипты одностраничного навигационного поведения:
Ваш сайт, вероятно, использует JavaScript для управления навигацией по странице. Если внедренный скрипт обрабатывает все клики по ссылкам, то он может игнорировать ссылки с внешними URL. Это особенно вероятно в случае, если скрипт реализует плавную прокрутку по разделам. -
Отсутствие правильного класса CSS:
Вы упомянули о том, что добавление классаexternal
не решило проблему. Если ваш JavaScript не учитывает этот класс при обработке кликов по ссылкам, это также может стать причиной поведения, которое вы наблюдаете. -
Ошибки в HTML-коде:
Убедитесь, что ваш HTML-код корректен и не содержит ошибок, которые могут препятствовать правильной работе ссылок.
Решения проблемы
-
Изменение JavaScript:
Найдите скрипт, который отвечает за навигацию по меню. Обычно он содержит обработчик событий для кликов по ссылкам. Вам нужно модифицировать этот код, чтобы он корректно обрабатывал внешние ссылки. Например:$('a').click(function(e) { var href = $(this).attr('href'); if (href.startsWith('http') || href.startsWith('www')) { // Если это внешний URL, не останавливаем событие return true; } else { // Логика для плавной прокрутки e.preventDefault(); // Ваш код плавной прокрутки } });
-
Добавление атрибута
target
:
Убедитесь, что внешние ссылки имеют атрибутtarget="_blank"
, чтобы они открывались в новой вкладке. Например:<a href="http://www.google.com" target="_blank" class="menu-item-href">Google</a>
-
Проверка CSS-классов:
Обратите внимание, что добавление классаexternal
может не сработать, если ваш JavaScript не проверяет наличие этого класса. Убедитесь, что JavaScript файл включает логику для обработки данного класса. -
Консоль разработчика:
Используйте инструменты разработчика (F12 в большинстве браузеров) для отслеживания ошибок JavaScript. Проверьте, нет ли ошибок в консоли, которые могут препятствовать нормальной работе сайта. -
Тестирование:
После внесения изменений тщательно протестируйте функциональность меню на наличие возможных регрессионных ошибок. Убедитесь, что все ссылки — и внутренние, и внешние — работают корректно.
Заключение
Проблема с открытием внешних ссылок может быть вызвана несколькими факторами, включая специфическое поведение JavaScript для одностраничных приложений. Проведение вышеупомянутых шагов поможет вам модифицировать поведение вашего меню, обеспечив правильную работу как внутренних, так и внешних ссылок. Если вы не уверены в своих силах, стоит обратиться к профессиональному разработчику, который сможет помочь вам внести необходимые изменения в код.
Если у вас есть дополнительные вопросы, не стесняйтесь обращаться за помощью. Успехов вам в доработке вашего сайта!