Intereting Posts
posts_nav_link (); выбирает index.php вместо category.php в качестве шаблона На одной из моих страниц используется только шаблон archive.php. Зачем? Импорт вложений – не прикрепляется к post_parent Как получить описание терминов в запросе архива термина таксономии? Как извлекать значения из базы данных WP на основе выбранного значения параметра путем onchange с помощью PHP? Как изменить текст Remove featured image Запуск интерфейса и бэкэнд WordPress в разных доменах Как можно изменить размеры изображений в WordPress без добавления какого-либо сжатия или изменения цветового профиля изображений? Связать сообщения вместе (относительные, не сгруппированные) WordPress удаляет <br/> разделитель из последнего элемента в wp_list_categories Поиск помощи при написании правильного синтаксиса функции для печати результатов пользовательских полей полей для открытия в wp_footer Проблема с добавлением анимированного эффекта на название сайта Скрыть содержимое после перехода на страницу 2 архива, показать содержимое, когда на первой странице W3 Total Cache CSS & JS-файлы Проблемы с GZip Как создать настраиваемое поле в виджетах по умолчанию для worpdress?

Как заставить элемент меню верхнего уровня не иметь ссылку, но есть подменю, которые связаны?

Я строю горизонтальное меню, и некоторые записи в этом меню будут иметь выпадающие меню (подменю), а некоторые – нет. Те, у которых есть подменю, на самом деле не страницы. Они предназначены только для руководства для выпадающих списков.

Например, скажем, горизонтальное меню выглядит следующим образом:

Главная | О компании | Продукты | Направления | контакт

И элемент «products» li должен иметь 3 страницы, связанных в вертикальном раскрывающемся списке ниже, поэтому «продукты» сами по себе не представляют собой страницу, как я могу это сделать в WP?

(Я использую WP как CMS со статическими домашними и внутренними страницами. Я строю свои собственные шаблоны, стилю меню в CSS, а затем регистрирую меню в функции.php и вызываю их в шаблонах.) В WP вы добавляете записи в меню через список страниц или пользовательские ссылки. Но я не хочу, чтобы «продукты» были связаны. Если я не добавлю ссылку на пользовательскую ссылку, она не позволит мне добавить ее в меню.

Является ли это выполнимым через меню администратора или мне нужно подойти к нему по-другому?

Спасибо за любую помощь!

У меня есть несколько идей:

  1. Установите пользовательскую ссылку на # которая ничего не вернет
  2. Добавьте пользовательский класс к элементам, а затем используйте jQuery для удаления ссылок.
  3. Использовать эквивалент PHP для метода jQuery
  4. Используйте плагин Link Disable Parent Menu Link (или разделите его и напишите самостоятельно)

Самый простой способ сделать это без плагина или чего-то другого – использовать функцию «Меню» WordPress. Вот инструкции для WordPress 4.8:

  1. На панели инструментов WordPress перейдите в «Внешний вид -> Меню»,
  2. На вкладке «Редактировать меню» выберите «Пользовательские ссылки»,
  3. Для URL-адреса введите «#» (без кавычек)
  4. Для текста ссылки введите желаемый текст для верхнего уровня раскрывающегося меню.
  5. Нажмите кнопку «Добавить в меню»
  6. Перетащите пункт меню в нужное положение в меню
  7. Для только что добавленного пункта меню щелкните стрелку вниз справа от элемента (он будет читать «пользовательскую ссылку» слева от элемента)
  8. Удалите «#» из URL-адреса. Это – во всех браузерах – преобразует ссылку в обычный текст.
  9. Нажмите кнопку «Сохранить меню»

Самый простой метод, который я придумал, заключался в создании элемента пользовательской ссылки со значением URL-адреса ссылки # . Это отправляет пользователя на пустой хэш на той же странице, поэтому в основном ссылки нигде.

Тем не менее, есть некоторые побочные эффекты использования пустых хэшей для ссылок на место. Ссылка будет по-прежнему отображаться и вести себя как ссылка, поэтому она может запутать пользователя, когда они нажимают на то, что кажется ссылкой, но ничего не происходит. Другой эффект заключается в том, что нажатие на пустую хэш-ссылку отменяет любой существующий хеш, отправляя пользователя в начало страницы. Возможно, это не так беспокоит меню, которое находится в верхней части страницы в любом случае, но оно очень раздражает, когда страница неожиданно перескакивает, когда вы этого не ожидаете, особенно если это меню нижнего колонтитула.

Решение состоит в объединении пустого хеш-метода с фрагментом кода для обнаружения, когда в меню используются пустые хэш-ссылки, и полностью удалить атрибут href из этой ссылки. Элементом без атрибута href является правильный метод HTML 5 для создания ссылки-заполнителя.

 /** * Remove the href from empty links `<a href="#">` in the nav menus * @param string $menu the current menu HTML * @return string the modified menu HTML */ function wpse_remove_empty_links( $menu ) { return str_replace( '<a href="#">', '<a>', $menu ); } add_filter( 'wp_nav_menu_items', 'wpse_remove_empty_links' ); 

Я решил так: в header.php (вашей темы) я искал:

 'link_before' => '', 'link_after' => '', 

и заменяется на:

 'link_before' => '<script>var scriptTag=document.getElementsByTagName("script");scriptTag=scriptTag[scriptTag.length-1];if(scriptTag.parentNode.href)if(scriptTag.parentNode.href.slice(-1)=="#")document.write("<span onclick=\"return false\">")</script>', 'link_after' => '<script>var scriptTag=document.getElementsByTagName("script");scriptTag=scriptTag[scriptTag.length-1];if(scriptTag.parentNode.href)if(scriptTag.parentNode.href.slice(-1)=="#")document.write("</span>")</script>', 

Простыми словами, этот скрипт проверяет, заканчивается ли его родительская ссылка «#», в этом случае он добавляет элемент span вокруг содержимого тега A, который отключает клик.

Надеюсь, поможет 🙂

Как предложили другие, вы можете создать пункт меню пользовательской ссылки с номером # в качестве URL-адреса. Затем сотрите #, как только он будет добавлен в меню. И, наконец, вы можете использовать это простое регулярное выражение для удаления фактического тега из этих ссылок.

 preg_replace('/<a>([^<]+)<\/a>/i', '<span class="no-link">$1</span>', $navHTML); 

Это приведет к удалению клика (и стиранию элемента). Таким образом, вам не нужно использовать пользовательские # ссылки в вашем меню.

 add_action( 'wp_footer', function(){ ?> <script> (function( $ ) { var itemm = $('#main-menu .menu-item-has-children > a'); itemm.click(function(){ document.activeElement && document.activeElement.blur(); return false; }); })(jQuery); </script> <?php }, 1, 0 ); 

Это сработало для меня:

Я активировал CSS-классы в меню> Параметры экрана> CSS-классы. Затем я дал элементу меню, что я хотел деактивировать класс «.nolink» и добавил этот кусок кода в свою собственную панель CSS:

 .nolink { pointer-events: none; cursor: default; } 

Используя PHP-подход, я добавил этот код в functions.php:

 function remove_link_contact_menu($item_output, $item) { if ($item->post_name == 'contact') return '<span>' . $item->title . '</span>'; return $item_output; } add_filter('walker_nav_menu_start_el', 'remove_link_contact_menu', 20, 2); add_filter('megamenu_walker_nav_menu_start_el', 'remove_link_contact_menu', 20, 2); 

Это заменит ссылку на элемент span для меню item с сообщением post_name == «contact», и это то, что я искал. Вы можете легко изменить это, чтобы проверить название меню или идентификатор или добавить код, чтобы проверить, есть ли у него какие-либо элементы детского меню и т. Д.

Оцените, что это старый поток, но для быстрого и грязного способа иметь ссылку в WordPress, указав URL-адрес:

#_

Обратите внимание на символ подчеркивания после хэштега. Таким образом, если ваше меню прокручивается вниз по странице (то есть фиксировано), вы не получаете переход к верхней части страницы при нажатии на нее и не требует никаких плагинов / скриптов.

Гораздо проще найти решение по другому вопросу:

Меню администратора. Выделите меню верхнего уровня, если на странице подменю (без отображения подменю)

Ищите ответ Аскелона. Работа отлично, без необходимости делать preg_replaces или jquery.