亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Wordpress 中的當前級別導航

Wordpress 中的當前級別導航

PHP
qq_遁去的一_1 2021-11-26 16:07:16
我有一個 3 級導航:Home   > submenu1       >> sub3          > submenu       >> sub4              >> sub5       // current pageAbout   > about2       >> sub6          > about3       >> sub7       我試圖分別獲得每個導航級別,使用上面的示例導航,在 sub5 頁面上,我需要當前第一級導航:首頁當前并行的第二級導航:submenu1、submenu(都在 Home 下)當前并行的第 3 級導航:sub4、sub5(子菜單下的菜單)我需要修改菜單的元素和樣式,并且需要使用 php 中的菜單項,例如:$menu_name = 'topnav';if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );$menu_items = wp_get_nav_menu_items($menu->term_id);foreach ( (array) $menu_items as $key => $menu_item ) {    $title = $menu_item->title;    $url = $menu_item->url;    [...]請幫助分別獲取導航層以按上述說明顯示。我讓第 1 級和第 3 級工作正常,但無法正確顯示當前并行的第 2 級導航。謝謝。
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

編輯:


要解決重復的情況,您必須添加一行代碼。您可以根據要選擇的父鏈添加以下行之一。我還在實際代碼中添加了這些行,以向您展示它們的去向。


// Get First Parent Chain

$current_level = array_values(array_slice($current_level, 0, 1));


// Get Last Parent Chain

$current_level = array_values(array_slice($current_level, -1, 1));

原始答案:(也更新了以上幾行)


此代碼將為您提供所有級別的項目,它僅根據您的要求編寫了三個級別,但您可以使用該邏輯并根據需要將代碼重復到多個級別,或者最好編寫一些遞歸的內容。


$menu_name = 'topnav';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {


    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );


    $menu_items = wp_get_nav_menu_items( $menu->term_id );


    // Convert Objects to Arrays, Enables us to use Array Filter

    $json  = json_encode($menu_items);

    $menu_items = json_decode($json, true);


    // Current Page

    $child = get_the_id();



    $current_level = array_filter( $menu_items, function($v, $k) use ($child) {

        return $v['object_id'] == $child;

    }, ARRAY_FILTER_USE_BOTH );


    // Get First Parent Chain ( Uncomment below line if you want to use this )

    //$current_level = array_values(array_slice($current_level, 0, 1));


    // Get Last Parent Chain ( Uncomment below line if you want to use this )

    //$current_level = array_values(array_slice($current_level, -1, 1));



    $current_level_keys = array_keys($current_level);

    $parent = $current_level[$current_level_keys[0]]['menu_item_parent'];


    if( !empty( $parent ) )

    {

        $current_level_items = array_filter( $menu_items, function($v, $k) use ($parent)  {

            return $v['menu_item_parent'] == $parent;

        }, ARRAY_FILTER_USE_BOTH );

    } else {

        $current_level_items = $current_level[$current_level_keys[0]];

    }


    echo '<pre>';

    print_r($current_level_items);

    echo '</pre>';


    $parent_level = array_filter( $menu_items, function($v, $k) use ($parent) {

        return $v['ID'] == $parent;

    }, ARRAY_FILTER_USE_BOTH );


    $parent_level_keys = array_keys($parent_level);

    $grand_parent = $parent_level[$parent_level_keys[0]]['menu_item_parent'];


    if( !empty( $grand_parent ) )

    {

        $parent_level_items = array_filter( $menu_items, function($v, $k) use ($grand_parent)  {

            return $v['menu_item_parent'] == $grand_parent;

        }, ARRAY_FILTER_USE_BOTH );

    } else {

        $parent_level_items = $parent_level[$parent_level_keys[0]];

    }


    echo '<pre>';

    print_r($parent_level_items);

    echo '</pre>';


    $grand_parent_level = array_filter( $menu_items, function($v, $k) use ($grand_parent) {

        return $v['ID'] == $grand_parent;

    }, ARRAY_FILTER_USE_BOTH );


    $grand_parent_level_keys = array_keys($grand_parent_level);

    $great_grand_parent = $grand_parent_level[$grand_parent_level_keys[0]];


    echo '<pre>';

    print_r($great_grand_parent);

    echo '</pre>';


}

我試圖將其寫成自我解釋,但如果您有任何問題,我將很樂意提供幫助。


查看完整回答
反對 回復 2021-11-26
  • 1 回答
  • 0 關注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號