Вопрос или проблема
Мне нужен навигационный элемент, что-то вроде этого.
Главная – Люди – О нас – Услуги – Контакты
Главная, О нас, Услуги и Контакты – это все страницы.
Люди НЕ имеют страницы, я хотел бы использовать эту ссылку, чтобы открыть вторую навигацию.
Можно ли добавить ссылку в 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:
- Перейдите в раздел «Внешний вид» > «Меню».
- Добавьте новый элемент «Настраиваемая ссылка» и введите URL (можно временно использовать место, которое не существует).
- Помните, что вы можете удалить URL после добавления ссылки.
- Вы сможете добавить класс для этого элемента с помощью диалогового окна редактирования меню.
Этот способ подходит, если вы не против немного потрудиться в интерфейсе 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:
- Унаследуйте от класса
Walker_Page
и переопределите его методы, чтобы настроить вывод по своему усмотрению. - В этом классе вы сможете добавлять дополнительные HTML-теги, классы и идентификаторы, необходимые для вашей структуры навигации.
Этот метод требует больше усилий и программировочного опыта, но он дает вам полный контроль над выводом и стилями ссылок.
Вывод
Каждый из подходов имеет свои плюсы и минусы. Если вам нужно быстрое решение, которое будет легко реализовать, вы можете воспользоваться настраиваемыми ссылками. Однако, если вам нужен уникальный идентификатор и контроль над выводом, фильтрация wp_list_pages
или создание собственного Walker будет лучшим выбором.
Надеюсь, эти рекомендации помогут вам создать желаемую навигацию для вашего сайта на WordPress.