Изучение различных методов получения ссылки на меню WordPress по идентификатору страницы

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.