2012-07-04 5 views
2

У меня есть тема WordPress, использующая wp_nav_menu() для создания меню. У меня есть пользовательский пункт меню в этом меню, который идет на нестандартную страницу Wordpress. Есть ли способ, которым я могу условно установить этот элемент навигации в текущий момент на основе соответствия в строке url?Пользовательский активный пункт меню в меню wordpress

Благодаря

ответ

4

Вы можете использовать nav_menu_css_class в Wordpress для достижения результата вы после этого. Используя этот крючок, вы можете изменить массив классов 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 (нуль, $ _SERVER [ 'REQUEST_URI'])); –

Смежные вопросы