2012-07-04 105 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']) ); –