2012-07-04 93 views
2

我有一個使用wp_nav_menu()構建菜單的wordpress主題。我在這個菜單中有一個自定義菜單項,可以進入非標準的WordPress頁面。有沒有一種方法可以根據url字符串中的匹配條件將此導航項目設置爲當前狀態?wordpress菜單中的自定義活動菜單項

感謝

回答

4

您可以使用在WordPress中nav_menu_css_class實現你之後的結果。使用這個鉤子你可以改變一個可以應用到菜單的CSS類的數組。

add_filter('nav_menu_css_class', 'add_parent_url_menu_class', 10, 2); 

function add_parent_url_menu_class($classes = array(), $item = false) { 
    // Get current URL 
    $current_url = current_url(); 
    // Get homepage URL 
    $homepage_url = trailingslashit(get_bloginfo('url')); 
    // Exclude 404 and homepage 
    if(is_404() or $item->url == $homepage_url) return $classes; 
     if (strstr($current_url, $item->url)) { 
      // Add the 'parent_url' class 
      $classes[] = 'parent_url'; 
     } 
    return $classes; 
} 

function current_url() { 
    // Protocol 
    $url = ('on' == $_SERVER['HTTPS']) ? 'https://' : 'http://'; 
    $url .= $_SERVER['SERVER_NAME']; 
    // Port 
    $url .= ('80' == $_SERVER['SERVER_PORT']) ? '' : ':' . $_SERVER['SERVER_PORT']; 
    $url .= $_SERVER['REQUEST_URI']; 

    return trailingslashit($url); 
} 

這種方法會忽略404個頁面或站點的根目錄,但類別中,如果當前的URL菜單項URL匹配添加到菜單項。

此代碼將全部功勞:http://www.rarescosma.com/2010/11/add-a-class-to-wp_nav_menu-items-with-urls-included-in-the-current-url/

+0

燁)釘它 –

+0

您可以通過更改$ current_url避免current_url功能完全:$ current_url = trailingslashit(get_site_url(NULL,$ _ SERVER [ 'REQUEST_URI']) ); –