2012-11-03 15 views
5

Mam menu WordPress, które ma kilka pozycji menu dodanych za pomocą standardowej (przeciągnij i upuść) funkcji menu administratora WordPress. Ostatnio musiałem dodać kolejny element do menu, który generuje dynamiczny link href. I że osiągnięto stosując następujący kod w moim pliku functions.php:Dodawanie niestandardowego elementu menu do menu WordPress

// dodać swoją pozycję menu profilu dynmacially do menu Członkowie (generowanie nazwę użytkownika w oparciu o bieżący użytkownik zalogowany)

add_filter ("wp_nav_menu_items", "add_profilelink_in_menu", 10, 2);

funkcja add_profilelink_in_menu ($ items, $ args) {

if($args->theme_location == 'secondary') { 

global $current_user;    
     //converts user id to username   
     $user_info = get_userdata($current_user->ID); 

$items .='<li id="menu-item-2091" class="menu-item menu-item-2091"> 
<a href="https://www.mysite.com/members/' . $user_info->user_login .'">Profile</a> 
</li>'; 

    } 
    return $items; 

}

Moim problemem jest to, że ta pozycja menu zostanie dodany do końca menu i regularnych zajęć WordPress menu takich ponieważ "bieżący element menu" nie zostanie zastosowany do tego elementu. Czy istnieje sposób, aby kontrolować położenie miejsca, do którego jest dodawany ten element menu (Na przykład: dodaj ten element po dwóch pierwszych elementach?)

oraz w jaki sposób można uzyskać WordPress, aby traktować ten dynamicznie generowany element menu jako zwykły element menu i czy dodaje wszystkie klasy, które dodaje do innych pozycji menu (utworzonych za pomocą funkcji menu WordPress)?

Dzięki za pomoc.

+0

chciałbyś spróbować jQuery? – loQ

+0

Tak, chciałbym, proszę, – Dmitri

Odpowiedz

1

Oto logika, że ​​można oprzeć przy użyciu jquery

//suppose your menu is this 
    <ul id="secondary_nav"> 
    <li id="li_unique_id_1"><a href="">menu 1</a></li> 
    <li id="li_unique_id_2"><a href="">menu 2</a></li> 
    <li id="li_unique_id_4"><a href="">menu 4</a></li> 
</ul> 

//the jquery workaround 
//place this in your footer 
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script> 
<script type='text/javascript'> 
$(function(){ 
    <?php 
    global $current_user;    
    //converts user id to username   
    $user_info = get_userdata($current_user->ID); 
    ?> 
    $("<li id='menu-item-2091' class='menu-item menu-item-209'><a href='https://www.mysite.com/members/<?php echo $user_info->user_login; ?>'>Profile</a></li>").insertAfter("#secondary_nav #li_unique_id_2");  
}); 
</script> 

Można również użyć insertBefore funkcję

+0

Dziękuję bardzo! To jest genialne! – Dmitri

+0

jquery jest genialny !! – loQ

+0

To jest okropne. Nie ma powodu, aby używać JavaScript tutaj. –

0

Czy sprawdziłeś opcję menu Wordpress w tematach-> menu dla tego? Możesz łatwo dodać menu stamtąd również możesz ustawić własne menu. Mam nadzieję, że Ci to pomoże.

+0

dzięki, ale problem polega na tym, że link elementu menu jest generowany dynamicznie, więc motywy wordpress-> menu nie pozwala na tę funkcjonalność. – Dmitri

+0

Tak, menu wordpress są generowane dynamicznie, ale można skonfigurować ich kolejność, a także utworzyć niestandardowe menu z niestandardową opcją adresu URL strony administratora. –

Powiązane problemy