Непостраничная ссылка в wp_list_pages

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

Мне нужен навигационный элемент, что-то вроде этого.

Главная – Люди – О нас – Услуги – Контакты

Главная, О нас, Услуги и Контакты – это все страницы.

Люди НЕ имеют страницы, я хотел бы использовать эту ссылку, чтобы открыть вторую навигацию.

Можно ли добавить ссылку в wp_list_pages, которая не будет вести на страницу.

Также можно ли добавить идентификатор к этой ссылке, которая не имеет страницы.

Я хотел бы, чтобы код выглядел примерно так.

    <ul>
      <li><a href="https://wordpress.stackexchange.com/questions/103936/Wordpress link">Главная</a></li>
      <li id="people"><a href="https://wordpress.stackexchange.com/questions/103936/No Page">Люди</a></li>
      <li><a href="https://wordpress.stackexchange.com/questions/103936/Wordpress link">О нас</a></li>
      <li><a href="https://wordpress.stackexchange.com/questions/103936/Wordpress link">Услуги</a></li>
      <li><a href="https://wordpress.stackexchange.com/questions/103936/Wordpress link">Контакты</a></li>
    </ul>  

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

Вариант #1 — т.е. просто, но это своего рода хака

Добавьте пункт меню с формой “Пользовательские ссылки”. Вам нужно предоставить URL, но вы можете удалить URL после того, как элемент будет добавлен в меню. В меню у вас останется <a>Люди</a>. Вы не можете добавить id, но можете добавить class через диалоговое окно элемента меню.

Вариант #2 — Фильтр wp_list_pages

function prepend_to_page_walker_wpse_103936($output) {
  $pattern = '|<ul>|';
  $output = preg_replace($pattern,'<ul><li id="people"><a href="https://wordpress.stackexchange.com/questions/103936/No Page">Люди</a></li>',$output,1);
  return $output;
}
add_filter('wp_list_pages', 'prepend_to_page_walker_wpse_103936');

Вариант #3 — Написать walker


Вариант #1, очевидно, проще, если вы можете его использовать, но, похоже, вы не можете. Тем не менее, я решил его предложить.

Вариант #2 должен сработать. preg_replace с четвертым лимит-параметром должен заменить только первое вхождение <ul>.

Вариант #3 даст вам наибольшую гибкость, но, похоже, вам нужно будет заменить значительный метод, чтобы сделать это (или этот), и я не вижу смысла в этом усилии. Возможно, я что-то упускаю.

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

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

Опция 1: Использование настраиваемых ссылок

Наиболее простой способ — добавить элемент меню с помощью функции настраиваемых ссылок в административной панели WordPress:

  1. Перейдите в раздел «Внешний вид» > «Меню».
  2. Добавьте новый элемент «Настраиваемая ссылка» и введите URL (можно временно использовать место, которое не существует).
  3. Помните, что вы можете удалить URL после добавления ссылки.
  4. Вы сможете добавить класс для этого элемента с помощью диалогового окна редактирования меню.

Этот способ подходит, если вы не против немного потрудиться в интерфейсе WordPress, но не позволяет назначить уникальный ID для ссылки.

Опция 2: Фильтрация wp_list_pages

Если вы хотите иметь более точный контроль над выводом навигационного меню и уникальный ID для ссылки, вы можете использовать фильтр wp_list_pages. Вот как это можно сделать:

function prepend_to_page_walker_wpse_103936($output) {
    $pattern = '|<ul>|';
    $output = preg_replace($pattern, '<ul><li id="people"><a href="https://wordpress.stackexchange.com/questions/103936/No Page">People</a></li>', $output, 1);
    return $output;
}
add_filter('wp_list_pages', 'prepend_to_page_walker_wpse_103936');

Этот код добавляет элемент <li> с идентификатором "people" перед первым вхождением тега <ul> в выводе wp_list_pages. Плюсы этого метода:

  • Позволяет вставлять код непосредственно в wp_list_pages.
  • Даёт возможность добавить уникальный ID.

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

Опция 3: Создание собственного Walker

Если вам необходимо больше контроля и гибкости, самый сложный, но мощный способ — это создание собственного класса Walker:

  1. Унаследуйте от класса Walker_Page и переопределите его методы, чтобы настроить вывод по своему усмотрению.
  2. В этом классе вы сможете добавлять дополнительные HTML-теги, классы и идентификаторы, необходимые для вашей структуры навигации.

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

Вывод

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

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

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

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