2012-11-03 11 views
5

J'ai un menu WordPress qui comporte quelques éléments de menu que j'ai ajoutés via la fonction de menu d'administration WordPress standard (glisser-déposer). Récemment, j'ai dû ajouter un autre élément au menu qui génère un lien href dynamique. J'ai réalisé qu'en utilisant le code suivant dans mon fichier functions.php:Ajout d'un élément de menu personnalisé au menu WordPress

// ajouter mon élément de menu profil dynmacially au menu membres (générer nom d'utilisateur en fonction de l'utilisateur actuel connecté)

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

fonction add_profilelink_in_menu (articles $, $ 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; 

}

Mon problème est que cet élément de menu est ajouté à la fin du menu et les classes de menu de WordPress réguliers tels en tant que 'current-menu-item' ne s'applique pas à cet élément. Existe-t-il un moyen de contrôler la position d'ajout de cet élément de menu (par exemple: ajouter cet élément après les deux premiers éléments?)

et comment puis-je obtenir WordPress pour traiter cet élément de menu généré dynamiquement un élément de menu régulier et l'ajouter toutes les classes qu'il ajoute les autres éléments de menu (créé à travers la fonctionnalité de menu WordPress)?

Merci pour toute aide.

+0

voulez-vous essayer jquery? – loQ

+0

oui je voudrais s'il vous plaît – Dmitri

Répondre

1

Voici la logique que vous pouvez base en utilisant 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> 

Vous pouvez également utiliser la fonction insertBefore

+0

Merci beaucoup! c'est génial! – Dmitri

+0

jquery est génial !! – loQ

+0

C'est horrible. Il n'y a aucune raison d'utiliser JavaScript ici. –

0

Avez-vous vérifié l'option de menu Wordpress dans le menu themes-> pour cela? Vous pouvez facilement ajouter un menu à partir de là, vous pouvez également définir le menu personnalisé à partir de là. Espérons que cela vous aidera.

+0

merci j'ai, mais le problème est que le lien de l'élément de menu est généré dynamiquement Wordpress themes-> menu ne permet pas cette fonctionnalité. – Dmitri

+0

Oui les menus wordpress sont générés dynamiquement mais vous pouvez configurer leur ordre ainsi que créer un menu personnalisé avec l'option d'option d'url personnalisée admin side. –

Questions connexes