Вопрос или проблема
Краткая версия: перед обновлением до WP 4.5 в день, когда единственным известным изменением было добавление страницы в подменю через панель администрирования навигационного меню, все ссылки меню типа “Пользовательская ссылка”, где мы указываем URL, внезапно потеряли свои атрибуты href. Ссылки типа “Страница” по-прежнему их имеют.
После многочисленных экспериментов я подтвердил, что отключение всех плагинов не изменило ситуацию, но установка темы TwentyFifteen исправила это.
Авторы темы больше недоступны для помощи.
Длинная версия:
На данный момент мне удалось подтвердить, что все некорректные элементы не имеют атрибута href в своем теге, поэтому они не знают, на что ссылаться, и что все из них имеют тип “Пользовательская ссылка”, где мы указали адрес.
Я отключал и заново включал все плагины, но это на это не повлияло. Я только что обновил WordPress до версии 4.5, которая вышла сегодня. Это не исправило ситуацию.
Я загрузил и сохранил изменения в меню, чтобы увидеть, сбросит ли это настройки. Однако этого не произошло.
Загрузил страницу с отключенным JavaScript, чтобы исключить возможность того, что jQuery или другой JavaScript удаляет href после рендеринга. Они все еще отсутствовали.
Пробовал редактировать локальную пользовательскую ссылку и удалить хост, чтобы выяснить, была ли проблема в ссылках, начинающихся с http, но это ничего не изменило.
Добавил CSS-класс к одной из пользовательских ссылок через админку и подтвердил, что он появился на обрамляющем <li>
на фронтэнде, но это не помогло с href на ссылке.
Пока что единственная поддержка, которую я нашел по этому вопросу, говорила, что у них была поврежденная таблица базы данных, которая это вызывала. Поэтому я выполнил команду CHECK TABLE для каждой таблицы WP, и все они вернулись как OK.
Смена темы на TwentyFifteen сделала так, что все элементы меню имеют правильные атрибуты href. При возврате обратно проблема повторяется.
В header.php меню формируется с помощью wp_nav_menu(array('menu_class'=>'sf-menu'))
. Я предполагаю, что sf – это superfish. Я убрал класс, и меню было выведено без стилей, но все еще без href для пользовательских ссылок.
functions.php, похоже, не имеет замены для wp_nav_menu()
.
Что делать дальше?
Я думаю, что это, вероятно, связано с проблемой обновления ядра до jQuery 1.12. Ознакомьтесь с этой страницей. В обсуждении ядра вчера это был самый высокий приоритет, и было решено, что это зависит от разработчиков тем и пользователей для обновления. Пожалуйста, посмотрите на эту ссылку, она очень полезна. Они также отметили, что из-за этого изменения и возникших проблем будет больше публикаций на “make”, а также на wp tavern для пользователей.
Я также должен уточнить, что упоминаемое мной исправление заключается в том, чтобы изменить любую: a[href=#scroll-to-top]
на a[href="#scroll-to-top"]
… обратите внимание на двойные кавычки!
Ответ или решение
Ваша проблема с отсутствием атрибутов href у пользовательских ссылок в меню после обновления до WordPress 4.5 может быть связана с несколькими факторами, включая изменения в JavaScript, касающиеся новой версии jQuery. Вот шаги, которые вы можете предпринять, чтобы попытаться решить эту проблему:
-
Проверка кода темы: Убедитесь, что в вашей теме нет изменений, которые могли бы повлиять на генерацию меню. Посмотрите на файл
header.php
, где используется функцияwp_nav_menu()
. Убедитесь, что она правильно настроена и что в вашей теме не переопределено поведение этой функции. -
Проблемы с JavaScript: Ваша проблема может быть связана с изменениями в jQuery 1.12. Это может вызывать проблемы, если в вашем коде используются селекторы или поведение, которые несовместимы с новой версией jQuery. Проверьте наличие элементов меню, которые могут содержать обращение к ссылкам без окружения в кавычках, например:
a[href=#scroll-to-top]
Убедитесь, что вместо этого у вас:
a[href="#scroll-to-top"]
Обратите внимание на использование двойных кавычек.
-
Отключение пользовательского кода и дополнительных скриптов: Если у вас есть пользовательские скрипты или дополнительные скрипты от сторонних разработчиков, временно отключите их и проверьте, сохраняется ли проблема. Возможно, какой-то из скриптов мешает корректной работе меню.
-
Проверка на конфликты с плагинами: Вы уже пробовали отключать все плагины, но стоит убедиться, что нет конфликтов внутри самой темы. Если у вас есть возможность разрабатывать, попробуйте создать дочернюю тему и тестировать меню с минимальными изменениями.
-
Обновление темы: Если ваша тема больше не поддерживается разработчиком, возможно, стоит рассмотреть вариант поиска аналогичной, но активно поддерживаемой темы. Баги в неактивных темах не будут исправляться, что сделает ваше решение временным.
-
Используйте инструменты для отладки: Используйте инструменты для разработчиков в вашем браузере (обычно можно открыть их при помощи клавиши F12) для анализа элементов меню. Убедитесь, что при рендеринге на клиенте атрибут href генерируется корректно.
-
Обратитесь в сообщество: Если ни один из вышеуказанных шагов не помогает, возможно, стоит обратиться за помощью на форумах поддержки WordPress или в сообществах разработчиков. Опишите подробно свою проблему и шаги, которые вы уже предприняли.
Если после выполнения всех шагов проблема остается неразрешенной, рассмотрите возможность создания резервной копии вашего сайта и переустановки WordPress с нуля, что может помочь устранить возможные повреждения в файлах или базе данных.