WordPress – это популярная система управления контентом (CMS), которая позволяет пользователям легко создавать веб-сайты и управлять ими. Одной из распространенных задач при разработке WordPress является получение ссылки меню на основе определенного идентификатора страницы. В этой статье мы рассмотрим несколько способов добиться этого на примерах кода PHP.
Метод 1: использование функции wp_get_nav_menu_items
$menu_items = wp_get_nav_menu_items('menu-slug');
foreach ($menu_items as $item) {
if ($item->object_id == $page_id) {
$menu_link = $item->url;
break;
}
}
Объяснение: Этот метод извлекает все пункты меню для определенного фрагмента меню с помощью функции wp_get_nav_menu_items. Затем он перебирает каждый элемент, проверяя, соответствует ли object_idжелаемому идентификатору страницы. Если она найдена, ссылка меню сохраняется в переменной $menu_link.
Метод 2: использование функций wp_get_nav_menu_objectи wp_get_nav_menu_items
$menu_obj = wp_get_nav_menu_object('menu-slug');
$menu_items = wp_get_nav_menu_items($menu_obj->term_id);
foreach ($menu_items as $item) {
if ($item->object_id == $page_id) {
$menu_link = $item->url;
break;
}
}
Объяснение: Этот метод сначала извлекает объект меню с помощью функции wp_get_nav_menu_object. Затем он извлекает пункты меню с помощью функции wp_get_nav_menu_itemsс идентификатором термина объекта меню. Затем код проходит по пунктам меню, проверяя, соответствует ли object_idжелаемому идентификатору страницы. Если она найдена, ссылка меню сохраняется в переменной $menu_link.
Метод 3. Использование пользовательских запросов к базе данных
global $wpdb;
$query = $wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_menu_item_object_id' AND meta_value = %d",
$page_id
);
$menu_item = $wpdb->get_row($query);
if ($menu_item) {
$menu_link = get_permalink($menu_item->post_id);
}
Объяснение: Этот метод использует пользовательские запросы к базе данных для получения ссылки меню. Он использует глобальную переменную $wpdbдля создания запроса, который извлекает post_idиз таблицы wp_postmeta, где находится meta_key. _menu_item_object_idи meta_valueсоответствуют желаемому идентификатору страницы. Если пункт меню найден, ссылка на меню получается с помощью функции get_permalink.
Метод 4. Использование пользовательской функции
function get_menu_link_by_page_id($page_id, $menu_slug) {
$menu_items = wp_get_nav_menu_items($menu_slug);
foreach ($menu_items as $item) {
if ($item->object_id == $page_id) {
return $item->url;
}
}
return '';
}
$menu_link = get_menu_link_by_page_id($page_id, 'menu-slug');
Объяснение: Этот метод инкапсулирует логику в пользовательскую функцию многократного использования. Он принимает идентификатор страницы и фрагмент меню в качестве параметров, извлекает пункты меню с помощью wp_get_nav_menu_items, а затем перебирает их, чтобы найти совпадение. Если найдено, возвращается ссылка на меню; в противном случае возвращается пустая строка.
В этой статье мы рассмотрели несколько методов получения ссылки меню WordPress на основе определенного идентификатора страницы. Эти методы обеспечивают гибкость и могут использоваться в соответствии с вашими конкретными требованиями. Используя предоставленные примеры кода PHP, вы можете легко реализовать один из этих методов в своих проектах WordPress.