Получите самый верхний пункт меню страницы, используя идентификатор страницы - wordpress - PullRequest
0 голосов
/ 06 августа 2020

Я хочу получить метку самого верхнего пункта меню дочернего меню с идентификатором страницы дочернего меню.

введите описание изображения здесь

Например: - У меня есть идентификатор тестовой страницы. Итак, я хочу получить текст L1, который является самым верхним родительским меню тестового меню

Примечание: тестовая страница не является текущей страницей - у меня есть только ее идентификатор страницы.

1 Ответ

0 голосов
/ 06 августа 2020

Я использовал приведенный ниже код для решения своей проблемы.

function get_l1_menu_label( $page_id, $menu = 'primary-menu' ) {

    //get menu
    $all_menus = new WP_Query( [
        'post_type'         => [ 'nav_menu_item' ],
        'meta_key'          => '_menu_item_object_id',
        'meta_value'        => $page_id, // page id here
        'tax_query'         => [
            [
                'taxonomy'  => 'nav_menu',
                'field'     => 'slug',
                'terms'     => $menu, //menu slug here
            ]
        ],
        'fields'            => 'ids'
    ] );

    $current_page_menu_id = $all_menus->posts[0];

    if ( !$current_page_menu_id ) {
        //looks like the page is not menu
         return '';
    }

    $parent_menu_id = (int) get_parent_menu_label_recursion($current_page_menu_id);

    //get the custom nav title set in menu admin
    $title = get_the_title( $parent_menu_id );

    if ( $title !== '' ) {
        return $title;
    } else {
        //the page orginal title is the label
        $parent_menu_page_id =  get_post_meta( $parent_menu_id, '_menu_item_object_id', true );
        return get_the_title( $parent_menu_page_id );
    }
}

//recursive function to fetch a top most parent id in nav menu
function get_parent_menu_label_recursion($menu_id) {
    
    $parent_menu_id = (int) get_post_meta( $menu_id, '_menu_item_menu_item_parent', true );
    
    if ( $parent_menu_id !== 0 ) {
        //the parent exist - send the parent menu
        return get_parent_menu_label_recursion($parent_menu_id);
    } else {
        //the menu sent to this function is the top most menu
        return $menu_id;
    }
}

Надеюсь, это кому-то поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...