Проблема с меню WordPress – если есть дочерние ссылки, родительские не будут нажиматься.

Вопрос или проблема

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

вставьте описание изображения здесь

вставьте описание изображения здесь

Если я нажимаю на любую из родительских ссылок к последнему дочернему элементу ‘1 банда’, ни одна из них не работает.

вставьте описание изображения здесь

Но если я введу полный URL с этим путем, http://x.x.x.x/test-products-only/ или любую из двух последующих дочерних ссылок к этому, страницы загружаются и показывают группы категорий.

Таким образом, это не значит, что страница отключена, похоже, что родительские элементы получают что-то вроде свойства noclick или что-то в этом роде.

Я не трогаю код, так как просто создаю несколько страниц, а затем меню в разделе Внешний вид > Меню.

Любая помощь будет оценена.

С уважением.

Сначала вам нужно проверить, какая тема у вас сейчас используется. Затем вам нужно убедиться, что меню темы поддерживает глубину объектов, которые вы используете.

Так называемый wp_nav_walker() (это встроенный класс PHP WordPress) – это функция/класс, который строит меню на фронтенде.

Если меню-ходок не поддерживает параметр массива depth => 4, то меню не способно выдавать такую глубину меню.

Может быть и другие причины, по которым ваше меню ломается, но вот как я бы подошел к этой проблеме.

Вам может быть интересно прочитать подробнее о меню ходоке WordPress здесь.

Также есть отличный урок о меню навходке на YouTube, который я настоятельно рекомендую для понимания того, что происходит под капотом.

Смотрите по этой ссылке: Меню навходка

Поскольку вы только смутно упомянули, что, возможно, хотите изменить код, я предлагаю вам связаться с разработчиком темы и спросить, поддерживает ли меню такую структуру меню.

Если вы можете программировать, посмотрите видео и перезапишите стандартное меню wp_nav_walker на свое собственное и убедитесь, что HTML-вывод поддерживает 4 уровня ul li > ul li > ul li > ul li.

Вы также можете попробовать реализовать/переписать навходку с GitHub, например:

Git Twittem Navwalker для Bootstrap 4

Имейте в виду, что этот вывод предназначен для CSS-фреймворка Bootstrap.

Спасибо за это. Это не работает с какой-либо глубиной. Но вы, возможно, на что-то натолкнулись. Вот что я смог найти, связанное с классом “ходок” в теме.

Если я смотрю на загруженный код в браузере, я вижу, что

  • для этого дочернего элемента имеет класс ‘not-click’.
    class smarthome_top_bar_walker extends Walker_Nav_Menu {
    
    static protected $menu_bg_test;
    function start_el(&$output, $item, $depth = 0, $args = Array(), $id = 0) {
    
        $smarthome_class = "";
      if(is_object($args)){
            global $smarthome_count;
            $icon=$item->classes[1];
        if($item->mega_menu == 1) {
            $smarthome_class="wd_mega-menu";
        }
        $smarthome_icon = $item->mega_menu_icon ;
        self::$menu_bg_test = $item->mega_menu_bg_image;
            $indent = ($depth) ? str_repeat("\t", $depth) : '';
            $class_names = $value="";
    
            $classes = empty($item -> classes) ? array() : (array)$item -> classes;
            $classes[] = ($item -> current) ? 'active' : '';
            $classes[] = ($args -> has_children) ? ' color-1 has-dropdown not-click' : '';
            $args -> link_before = (in_array('section', $classes)) ? '<label>' : '';
            $args -> link_after = (in_array('section', $classes)) ? '</label>' : '';
            $output .= (in_array('section', $classes));
            $class_names = ($args -> has_children) ? 'has-dropdown not-click '.$smarthome_class : '';
            $parent = $item -> menu_item_parent;
            if ($parent == 0) {
              $smarthome_count++;
            }
    
            $current_page = empty($item->classes[4]) ? '' : $item->classes[4];
            $class_names .= ' color-' . $smarthome_count .' '. $current_page ;
            $class_names = strlen(trim($class_names)) > 0 ? ' class="' . esc_attr($class_names) . '"' : '';
            $output .= $indent . '
            <li id="menu-item-' . $item -> ID . '"' . $value . $class_names  . '>';
    
            $attributes = !empty($item -> attr_title) ? ' title="' . esc_attr($item -> attr_title) . '"' : '';
            $attributes .= !empty($item -> target) ? ' target="' . esc_attr($item -> target) . '"' : '';
            $attributes .= !empty($item -> xfn) ? ' rel="' . esc_attr($item -> xfn) . '"' : '';
            $attributes .= !empty($item -> url) ? ' href="' . esc_url($item -> url) . '"' : '';
    
            $attributes .= ' class="has-icon"';
    
            $item_output = $args -> before;
            $item_output .= (!in_array('section', $classes)) ? '
            <a' . $attributes . '>' : '';
            if(($icon != '') and ($icon != '---- None ----'))  {
    
            $item_output .= '<i class="'.$smarthome_icon.' fa"></i> ';
            }
            $item_output .= $args -> link_before . apply_filters('the_title', $item -> title, $item -> ID);
            $item_output .= $args -> link_after;
            $item_output .= (!in_array('section', $classes)) ? '</a>' : '';
            $item_output .= $args -> after;
    
    
            $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args);
        }
    
    
    }
    
  • Теперь я не уверен, какую тему вы используете, но это может быть в настройках меню. Хотя вы не можете увидеть все настройки для меню, если не активируете их в параметрах экрана (находится в правом верхнем углу в панели управления – смотрите изображение ниже):

    вставьте описание изображения здесь

    Иногда здесь скрыты некоторые дополнительные параметры меню, и по умолчанию они деактивированы. Они будут находиться под “Показать расширенные свойства меню” – если это так, пожалуйста, активируйте их, и вы, возможно, сможете найти еще несколько параметров при редактировании элемента меню, как на изображении ниже:

    вставьте описание изображения здесь

    Если нет опций, тогда, боюсь, вам придется настроить меню самостоятельно, используя менюшный ходок WordPress, как упомянул user3135691.

    Удачи – надеюсь, вы сможете это исправить, используя настройки, и сэкономить время.

    Ответ или решение

    Проблема с меню WordPress: Кнопки родительских ссылок не работают

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

    Возможные причины проблемы

    1. Класс ‘not-click’ в HTML-разметке
      Из вашего описания видно, что в разметке, созданной классом smarthome_top_bar_walker, для родительских элементов добавляется класс 'not-click'. Это объясняет, почему элементы меню не работают. В коде, который вы привели, есть условие, добавляющее этот класс:

      $classes[] = ($args->has_children) ? 'color-1 has-dropdown not-click' : '';

      Это означает, что у родительских элементов с дочерними элементами будет добавлен класс, который, возможно, блокирует клики.

    2. Возможные настройки темы или плагина
      Некоторые темы могут иметь свои настройки для работы с меню, которые могут ограничивать использование вложенных меню. Проверьте, есть ли в настройках темы параметры для работы с многоуровневыми меню.

    3. Конфликт с JavaScript
      Иногда, если на сайте используется JavaScript (например, для анимации выпадающих меню), могут возникать конфликты, из-за которых клики блокируются. Проверьте консоль разработчика на наличие ошибок JavaScript, которые могли бы вызвать проблему.

    4. Ошибка в CSS
      Также возможно, что некоторые CSS-правила делают элементы меню некликабельными. Например, если родительский элемент перекрыт каким-либо абсолютно позиционированным элементом или если у него установлен стиль pointer-events: none;.

    Решения проблемы

    1. Модификация класса ‘not-click’
      Если вам доступен код Walker-класса, попробуйте удалить класс 'not-click' из структуры меню для родительских элементов. Найдите строку в коде вашего Walker-класса и измените её:

      $class_names = ($args->has_children) ? 'has-dropdown' : '';
    2. Обновление настройки меню
      Перейдите в панель управления WordPress и убедитесь, что все необходимые параметры вашего меню включены. Обычно такие параметры находятся в «Параметры экрана» в правом верхнем углу секции «Внешний вид» -> «Меню».

    3. Проверка конфликта JavaScript
      Отключите все плагины и проверьте, работает ли меню. Если меню заработает, поочередно включайте плагины, чтобы выявить конфликтный. Также проверьте в консоли, есть ли предупреждения или ошибки.

    4. Переписывание Walker-класса
      Если предыдущие методы не решили вашу проблему, возможно, вам стоит разработать собственный Walker-класс или использовать готовый, который поддерживает многослойные меню. Например, рассмотрите NavWalker для Bootstrap, который можно адаптировать под ваши нужды.

    Заключение

    Проблема с неработающими элементами меню в WordPress может быть вызвана различными факторами, начиная от параметров конструкции меню и заканчивая конфликтами кода. Важно поэтапно подходить к её решению, начиная с наиболее простых проверок и заканчивая изменением кода, если это необходимо. Если у вас возникли дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться к разработчику темы или к сообществу.

    Удачи в устранении проблемы!

    Оцените материал
    Добавить комментарий

    Капча загружается...