WordPress: Как сделать страницу некликабельной?

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

Распространенные сценарии использования некликабельных страниц

Родительские пункты меню: Создание пунктов верхнего уровня, которые служат только для организации выпадающих подменю (например, "Услуги", "Продукты"). Клик по такому пункту нецелесообразен, если все релевантные страницы находятся в подменю.

Визуальные разделители: Использование некликабельных элементов для структурирования сложных меню.

Демонстрационные цели: Временное отключение ссылок на стадии разработки или для демонстрации структуры сайта без активных ссылок.

Краткий обзор методов реализации

Существует несколько подходов к созданию некликабельных пунктов меню в WordPress:

Использование пользовательского меню и JavaScript: Простой метод, не требующий глубоких знаний программирования.

Применение специализированных плагинов: Удобный способ для пользователей, предпочитающих готовые решения.

Редактирование кода темы: Гибкий, но требующий технических навыков и осторожности метод для продвинутых пользователей.

Способ 1: Использование пользовательского меню и JavaScript

Этот метод заключается в создании пункта меню с использованием "Пользовательской ссылки" и последующем отключении стандартного поведения ссылки с помощью JavaScript.

Создание пользовательского меню в WordPress

Перейдите в раздел "Внешний вид" -> "Меню" в административной панели WordPress. Выберите существующее меню для редактирования или создайте новое.

Добавление пользовательской ссылки в меню

В блоке "Добавить элементы меню" выберите "Пользовательские ссылки".

В поле "URL" введите символ #.

В поле "Текст ссылки" введите название вашего некликабельного пункта (например, "Услуги").

Нажмите "Добавить в меню".

Важно: В правом верхнем углу экрана нажмите "Настройки экрана" и убедитесь, что опция "Классы CSS" отмечена.

Разверните добавленный пункт меню и в поле "Классы CSS (необязательно)" добавьте уникальный класс, например, non-clickable-menu-item.

Сохраните меню.

Использование JavaScript для предотвращения перехода по ссылке

Теперь необходимо добавить небольшой скрипт, который найдет все ссылки с указанным классом и отменит их стандартное действие (переход по URL).

Добавьте следующий JavaScript код в файл functions.php вашей дочерней темы (рекомендуется) или через плагин для добавления сниппетов:


    
    document.addEventListener('DOMContentLoaded', function() {
        /**
         * Selects all anchor elements within menu items having the 'non-clickable-menu-item' class.
         * @type {NodeListOf}
         */
        const nonClickableLinks = document.querySelectorAll('.non-clickable-menu-item > a');

        nonClickableLinks.forEach(link => {
            link.addEventListener('click', function(event) {
                /**
                 * Prevents the default action (navigation) when the link is clicked.
                 * @param {Event} event - The click event object.
                 */
                event.preventDefault();
                // Optional: You might want to add behavior for touch devices,
                // like toggling a submenu if it exists.
            });
        });
    });
    
    

Этот скрипт находит все элементы <a> внутри пунктов меню с классом non-clickable-menu-item и отменяет их стандартное поведение при клике.

Преимущества и недостатки данного метода

Преимущества:

Относительная простота реализации.

Не требует установки дополнительных плагинов.

Контроль над процессом.

Недостатки:

Требует добавления пользовательского кода (JavaScript и PHP).

Ссылка все еще существует в HTML, хотя и неактивна (может быть незначительным фактором для SEO).

Зависимость от JavaScript (если JS отключен, ссылка с # сработает).

Способ 2: Использование плагинов для создания некликабельных страниц

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

Обзор популярных плагинов (с примерами)

Многие плагины для управления мега-меню (например, Max Mega Menu, QuadMenu) или плагины, специально предназначенные для улучшения навигации, включают опции для отключения ссылок у родительских пунктов меню. Обычно это реализуется через добавление специального типа элемента меню ("Placeholder", "Non-link item") или через чекбокс в настройках существующего пункта меню.

Плагины мега-меню: Часто предоставляют опцию "Disable link" или "Make item non-clickable" прямо в интерфейсе настройки пункта меню.

Специализированные плагины: Могут добавлять отдельный метабокс в редакторе меню для создания элементов без ссылок.

Настройка и использование плагина

Процесс обычно сводится к следующему:

Установка и активация выбранного плагина.

Переход в "Внешний вид" -> "Меню".

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

Реклама

Настройка и сохранение меню.

Сравнение плагинов и выбор оптимального

Выбор плагина зависит от ваших потребностей:

Если вам нужна только функция некликабельных ссылок, ищите легковесный плагин, сфокусированный именно на этом.

Если вы планируете создавать сложные мега-меню, выбирайте комплексное решение, где отключение ссылок — одна из многих функций.

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

Способ 3: Редактирование темы WordPress (для продвинутых пользователей)

Этот метод предполагает модификацию способа, которым ваша тема генерирует HTML-код меню. Это наиболее гибкий, но и наиболее рискованный подход.

Изменение шаблона меню темы

WordPress использует функцию wp_nav_menu() для отображения меню. Эта функция, в свою очередь, может использовать кастомный Walker_Nav_Menu класс для генерации HTML. Вы можете:

Создать свой класс-наследник Walker_Nav_Menu: Переопределить методы start_el() или end_el(), чтобы изменить вывод конкретных элементов меню (например, убрать тег <a> для элементов с определенным CSS-классом).

Использовать фильтры: Применить фильтры, такие как nav_menu_link_attributes или walker_nav_menu_start_el, чтобы модифицировать атрибуты ссылки или весь HTML элемента на лету.

Пример (концептуальный) использования фильтра nav_menu_link_attributes в functions.php дочерней темы:

classes is an array of classes for the LI element
    if (isset($item->classes) && is_array($item->classes) && in_array('non-clickable-menu-item', $item->classes)) {
        // Option 1: Remove the href attribute entirely (might break some styles/JS)
        // unset($atts['href']); 

        // Option 2: Keep href="#" but add attributes for accessibility/JS hooks
        $atts['href'] = '#';
        $atts['role'] = 'button'; // Indicate it's interactive but not a link
        $atts['aria-haspopup'] = 'true'; // If it has a submenu
        // $atts['onclick'] = 'return false;'; // Alternative JS disable, less preferred than event listeners
    }
    return $atts;
}

// Hook into the filter
add_filter('nav_menu_link_attributes', 'my_modify_menu_link_attributes', 10, 4);

?>

Внедрение логики отключения ссылок

Логика обычно базируется на проверке CSS-класса, ID элемента меню или других его свойств ($item) внутри кастомного Walker’а или функции-фильтра. На основе этой проверки вы либо не выводите тег <a>, либо заменяете его на <span>, либо модифицируете атрибуты <a> (как в примере выше).

Риски и предостережения при редактировании темы

Обновления темы: Прямое редактирование файлов родительской темы приведет к потере изменений при обновлении. Всегда используйте дочернюю тему.

Ошибки PHP: Некорректный код в functions.php или шаблонах может привести к неработоспособности сайта ("белый экран смерти").

Сложность: Требует понимания структуры тем WordPress, PHP и работы с меню.

Совместимость: Кастомный код может конфликтовать с плагинами или будущими версиями WordPress.

Заключение: Выбор подходящего способа и дополнительные советы

Выбор метода зависит от ваших технических навыков и требований проекта:

JavaScript + Меню: Хороший баланс между простотой и контролем, подходит для большинства случаев. Основной минус – зависимость от JS.

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

Редактирование темы: Наиболее гибкий и "чистый" с точки зрения HTML-кода метод, но требует знаний PHP, WordPress API и осторожности при внедрении.

Рекомендации по SEO для некликабельных страниц

Поскольку некликабельные пункты меню обычно не соответствуют реальным страницам с контентом, их прямое влияние на SEO минимально. Однако, стоит учитывать:

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

Доступность: Убедитесь, что подменю под некликабельными пунктами легко доступны, в том числе с клавиатуры и на мобильных устройствах. Если используется JS для отключения ссылки, обеспечьте альтернативный способ раскрытия подменю (например, по фокусу или через отдельную иконку).

Избегайте # без JS: Если вы используете # в качестве URL и не отключаете переход с помощью JS, это может привести к переходу наверх страницы, что ухудшает пользовательский опыт.

Часто задаваемые вопросы

Влияет ли использование # в URL на SEO? Само по себе использование # как заглушки в меню не вредит SEO, если ссылка неактивна. Поисковые роботы обычно игнорируют такие ссылки для индексации.

Что лучше: убрать href или использовать event.preventDefault()? Использование event.preventDefault() предпочтительнее, так как сохраняет элемент <a>, что может быть важно для стилизации и доступности (ARIA атрибуты). Полное удаление href или замена <a> на <span> через PHP может быть семантически более правильным, но сложнее в реализации.

Как обеспечить доступность для некликабельных пунктов с подменю? Используйте ARIA атрибуты (aria-haspopup="true", aria-expanded="false") и убедитесь, что подменю можно открыть/закрыть с помощью клавиатуры (Enter или Пробел при фокусе на родительском элементе).


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