Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I created a mega menu on my site using wordpress native wp_menu. I wanted to display 4 columns in each mega menu. each column contains 5 links you can see it live here (it's in hebrew but check the top menu from right to left) click here

Up until this point everything works lovely.

what I want to do now is displaying more than 5 links in each column (say 10 for example) but only in the first drop down menu (from the right)

here is the original code:

<?php $menu_name = 'top_menu';
$menu = wp_get_nav_menu_object($menu_name);
$menuitems = wp_get_nav_menu_items( $menu->term_id, array( 'order' => 'DESC' ) );
?>
<ul class="nav top-nav">
<?php
$count = 0;
$submenu = false;
$i=0;
$output = '';
foreach( $menuitems as $item ){
    $link = $item->url;
    $title = $item->title;

    //if no parent
    if ( !$item->menu_item_parent ) {
    $parent_id = $item->ID;
    $output .= '<li>
        <a href="'.$link.'">'.$title.'</a>';
    }

    if ( $parent_id == $item->menu_item_parent ) {

        if ( !$submenu ) {
        $submenu = true;
        $output .= '<div class="mega-menu-section">
            <div class="wrapper">
                <ul class="drop-dow">';
        }

            $i++;
                    $output .= '<li>
                        <a href="'.$link.'">'.$title.'</a>
                     </li>';

        if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id && $submenu ) {
                $output .= '</ul>  
            </div>
        </div>';
        $submenu = false;
$i=0;
        } else if($i==5) {
                $output .= '</ul>
                <ul class="drop-dow">';
                $i=0;
        }
    }

    if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id ) {
    $output .= '</li>';
    $submenu = false;
    }
    $count++;
}
echo $output; ?>

</ul>

Note this part in the code:

else if($i==5)

this determines how many links I want to display in each column. if I change this to 10 it will work but it will work across all the drop down menus and I want it to work only for the first link on the right and all the others shoould remain 5. so I figured I will create a Boolean variable which will display different number in the first row if it sets to TRUE and then change it to FALSE to go back to 5.

this is what I came up with:

<?php $menu_name = 'top_menu';
$menu = wp_get_nav_menu_object($menu_name);
$menuitems = wp_get_nav_menu_items( $menu->term_id, array( 'order' => 'DESC' ) );
?>
<ul class="nav top-nav">
<?php
$count = 0;
$submenu = false;
$i=0;
$output = '';
$first_menu = true;
foreach( $menuitems as $item ){
    $link = $item->url;
    $title = $item->title;

    //if no parent
    if ( !$item->menu_item_parent ) {
    $parent_id = $item->ID;
    $output .= '<li>
        <a href="'.$link.'">'.$title.'</a>';
    }

    if ( $parent_id == $item->menu_item_parent ) {

        if ( !$submenu ) {
        $submenu = true;
        $output .= '<div class="mega-menu-section">
            <div class="wrapper">
                <ul class="drop-dow">';
        }

            $i++;
                    $output .= '<li>
                        <a href="'.$link.'">'.$title.'</a>
                     </li>';

        if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id && $submenu ) {
                $output .= '</ul> 
            </div>
        </div>';
        $submenu = false;
        $i=0;
        } else if (($i==10) && ($first_menu == true)) {
                $output .= '</ul>
                <ul class="drop-dow">';
                $i=0;
                $first_menu = false;
        } else if ($i==5) {
                $output .= '</ul>
                <ul class="drop-dow">';
                $i=0;
        }
    }

    if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id ) {
    $output .= '</li>';
    $submenu = false;
    }
    $count++;
}
echo $output; ?>

</ul>

See the variable "first_menu" which I set to true to show 10 in the first menu. unfortunately it is not working

I will appreciate any help!

Thanks

share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.