2013-01-07 49 views
0

我是新來的Wordpress。我的版本是WP 3.4.2 該網站是在我的本地主機,抱歉,我無法分享它。WordPress的菜單高亮

如何根據當前帖子動態高亮顯示導航菜單項?這個問題在Stack Overflow上出現很多,但我還沒有找到任何可接受的答案。我在這裏看到的一些答案使用Javascript,但我不能,因爲20%的訪問者沒有js。

我找到了一個解決方案,使用過濾器鉤子(一個新的概念給我)。 我在header.php中添加了下面的filter_hook。

這個掛鉤在正確的帖子上啓動,但最終的結果是錯誤的。我的整個菜單只是字符串:「current-menu-item」;而不是在我的菜單中爲項目添加一個類名「current-menu-item」。

任何人都可以請幫我理解我做錯了什麼嗎?

if(($post->post_type) =="communities") 
    add_filter('wp_nav_menu' , 'special_nav_class' , 10 , 2); 

function special_nav_class($item){ 

    if(true){ 
      $class = "current-menu-item"; 
    } 
    return $class; 
} 

回答

6

如果你使用WordPress embedded menu functionality(你一定要)的WordPress自動添加current-menu-item類到當前項目,current-menu-parent到主LI,如果當前項目是在下拉菜單中。

然後你所要做的就是將你的CSS規則應用到這些類中。

+0

謝謝你的提示。我讀了你從WP函數參考鏈接的頁面。我是否將此函數添加到頭文件? 的函數參考示出此示例: 'register_nav_menus(陣列( \t 'pluginbuddy_mobile'=> 'PluginBuddy移動導航菜單', \t 'footer_menu'=> '我的自定義頁腳菜單' ));' 我對不起這個問題,但是我在關聯數組參數中使用了什麼值? – GRY

+1

任何改變管理面板結構的功能都應該在指定的'functions.php'文件中使用。通過調用'wp_nav_menu'('menu'參數接受一個id,一個slu or或一個名字),在你的主題中檢索它們:http://codex.wordpress.org/ Function_Reference/wp_nav_menu。 – Matanya

1

我喜歡通過查看用於所討論的過濾器的源代碼,在「wp_nav_menu」的情況下,也就是在WordPress Trac NAV-菜單的template.php的線237來啓動。

回顧代碼我發現過濾器可以改變$ nav_menu變量。所以無論你從這個過濾器返回將直接成爲html。如果你想改變CSS類,你可能需要使用'nav_menu_css_class'過濾器。通過此篩選器,您可以查看分配的類,並覆蓋它們,僅用於指定的類或添加類。

if ($post->post_type == "communities") { 
    add_filter('nav_menu_css_class', 'special_nav_class', 10 , 3); 
} 

function special_nav_class($classes, $item, $args){ 
    if (true) { 
     $classes[] = "current-menu-item"; 
    } 
    return $classes; 
} 

我想你可能想要玩這個更多,但要將if語句移到special_nav_class函數中。我認爲post_type可以從您從過濾器收到的$ item變量中確定。但我不是100%的。