Is there a way to change the html of my wordpress page’s navigation bar? (I’d like to add in several divs that will be controlled with media queries.)
Thanks for reading!
Is there a way to change the html of my wordpress page’s navigation bar? (I’d like to add in several divs that will be controlled with media queries.)
Thanks for reading!
Yes, you’ll need to implement the walker class for this.
Here is a simple example.
$defaults = array(
'theme_location' => 'primary',
'container' => 'ul',
'menu_class' => 'nav navbar-nav main-nav',
'walker' => new Primary_Walker_Nav_Menu()
);
wp_nav_menu( $defaults );
In the above block of code, the wp_nav_menu()
function takes $defaults
as argument. In the array $defaults
, the last key is walker. Te walker key’s value is object of a class Primary_Walker_Nav_Menu
.
functions.php
file implement the following code:class Primary_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
if (array_search('menu-item-has-children', $item->classes)) {
$output .= sprintf("\n<li class="dropdown %s"><a href="https://wordpress.stackexchange.com/questions/172582/%s" class=\"dropdown-toggle\" data-toggle=\"dropdown\" >%s</a>\n", ( array_search('current-menu-item', $item->classes) || array_search('current-page-parent', $item->classes) ) ? 'active' : '', $item->url, $item->title
);
} else {
$output .= sprintf("\n<li %s><a href="https://wordpress.stackexchange.com/questions/172582/%s">%s</a>\n", ( array_search('current-menu-item', $item->classes) ) ? ' class="active"' : '', $item->url, $item->title
);
}
}
function start_lvl(&$output, $depth) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"dropdown-menu\" role=\"menu\">\n";
}
}
The start_el()
method is used to add the opening HTML tag for a single tree item (such as <li>
, <span>
, or <a>
) to $output
.
The start_lvl()
method is run when the walker reaches the start of a new “branch” in the tree structure.
Generally, this method is used to add the opening tag of a container HTML element (such as <ol>
, <ul>
, or <div>
) to $output
.
<ul id="menu-main-navigation" class="nav navbar-nav main-nav">
<li class="dropdown ">
<a href="http://karunshakya.com.np/services/" class="dropdown-toggle">Services</a>
<ul class="dropdown-menu" role="menu">
<li><a href="http://karunshakya.com.np/services/selection-et-recrutement/">Sélection et recrutement</a></li>
<li><a href="http://karunshakya.com.np/services/mise-disposition-de-personnel/">Mise disposition de personnel</a></li>
<li><a href="http://karunshakya.com.np/services/gestion-de-salaire/">Gestion de salaire</a></li>
</ul>
</li>
<li><a href="http://karunshakya.com.np/news/">News</a></li>
<li><a href="http://karunshakya.com.np/medias/">Medias</a></li>
<li class="last-child"><a href="http://karunshakya.com.np/contactez-nous/">Contactez-nous</a></li>
</ul>
How to use the Walker Class:
http://code.tutsplus.com/tutorials/understanding-the-walker-class–wp-25401