An open API service indexing awesome lists of open source software.

https://github.com/ronaldaug/wp-clean-nav

Wordpress CLEAN menu for tailwindcss or custom UI integration
https://github.com/ronaldaug/wp-clean-nav

Last synced: about 1 month ago
JSON representation

Wordpress CLEAN menu for tailwindcss or custom UI integration

Awesome Lists containing this project

README

        

# WP clean UI navbar

- No extra classes from Wordpress
- Has active class
- Build with recursive function and it can generate multiple sub-menus ( 2nd level, 3rd level, 4th level ..etc)

### Example output

```html


```

-------------------------------------
### Usage

1. [Create `clean-menu` file in your theme like this `classes/clean-menu.php`](#createfile)

2. [Add below code in functions.php](#functions)

3. [Call it somewhere in your wordpress template](#callit)

### 1. Create `clean-menu.php` file in your theme with below code ( CLEAN_Menu ).

e.g `classes/clean-menu.php`

```php
menu_item_parent == $parentId) {
$children = buildTree($flatNav, $navItem->ID);
if ($children) {
$navItem->children = $children;
}

$branch[$navItem->menu_order] = $navItem;
unset($navItem);
}
}

return $branch;
}

// get navs
$locations = get_nav_menu_locations();

// get menu items by menu name
$flatMainNav = wp_get_nav_menu_items($locations[$name]);
return buildTree($flatMainNav);
}

/**
* Generate Menu
*
* @param array $menus
* @param string $class
* @return void
*/
public static function generate_menu(array $menus, string $class) : string
{
$sub_menu = '

    ';
    foreach ($menus as $menu) {
    $children = $menu->children;
    $sub_menu .= empty($children) ? self::menu_li($menu) : self::menu_li($menu, $children);
    }
    return $sub_menu . '
';
}

/**
* Get single menu li
*
* @param object $menu
* @param array|null $children
* @return void
*/
protected static function menu_li(object $menu, array $children = null) : string
{
$active = $menu->object_id == get_queried_object_id() ? 'class="active"' : '';
if (empty($children)) {
return '

  • '.$menu->title.'
  • ';
    }
    return '

  • '.$menu->title.''. self::generate_menu($children, 'sub-menu') .'
  • ';
    }
    }

    ```
    --------------

    ### 2. Add below code in functions.php

    ```php
    /* -------------------------------------------
    Register Menu
    ---------------------------------------------- */
    function register_clean_menu(){
    require_once get_template_directory() . '/classes/clean-menu.php';
    }
    add_action( 'after_setup_theme', 'register_clean_menu' );

    register_nav_menus( array(
    'primary' => __( 'Top Menu', 'your_theme_name' ),
    'secondary' => __( 'Other pages Menu', 'your_theme_name' ),
    ) );

    if (!function_exists('clean_menus')) {

    /**
    * Get Menu List by menu name
    *
    * @param string $name
    * @return mixed
    */
    function clean_menus(string $name){
    // get menu array
    $menus = CLEAN_menu::get_data($name);

    // generate menu UI
    return CLEAN_menu::generate_menu($menus,'parent-menu');
    }

    }

    ```

    --------------

    ### 3. Call it somewhere in your wordpress template
    ```php
    = clean_menus(); ?>
    ```