Initial commit to github
This commit is contained in:
185
lib/class-menuitems.php
Normal file
185
lib/class-menuitems.php
Normal file
@@ -0,0 +1,185 @@
|
||||
<?php
|
||||
/**
|
||||
* BasicWP MenuItems Class
|
||||
*
|
||||
* @package BasicWP
|
||||
* @since 1.0.0
|
||||
*/
|
||||
|
||||
namespace BasicWP;
|
||||
|
||||
/**
|
||||
* Class MenuItems
|
||||
*
|
||||
* This class is responsible for managing menu items within the Basic-WP theme.
|
||||
*
|
||||
* @package Basic-WP
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class MenuItems {
|
||||
/**
|
||||
* Accepts menu name to populate navigation items.
|
||||
*
|
||||
* @var string $displayLocation
|
||||
*/
|
||||
protected $displayLocation;
|
||||
|
||||
/**
|
||||
* First level menu items (menu_item_parent = 0).
|
||||
*
|
||||
* @var array $topLevelNavItems
|
||||
*/
|
||||
public $topLevelNavItems;
|
||||
|
||||
/**
|
||||
* True if nav item has children items.
|
||||
*
|
||||
* @var bool $hasChildren
|
||||
*/
|
||||
public $hasChildren;
|
||||
|
||||
/**
|
||||
* Children navigation items.
|
||||
*
|
||||
* @var array $nestedNavItems
|
||||
*/
|
||||
public $nestedNavItems;
|
||||
|
||||
/**
|
||||
* True if the current page is the same as the menu item.
|
||||
*
|
||||
* @var bool $currentPage
|
||||
*/
|
||||
public $currentPage;
|
||||
|
||||
/**
|
||||
* Constructor method for initializing the class with a specific menu name.
|
||||
*
|
||||
* @param string $menuName The name of the menu to be used. Defaults to 'main_navigation'.
|
||||
*/
|
||||
public function __construct( $menuName = 'main_navigation' ) {
|
||||
$this->displayLocation = $menuName;
|
||||
|
||||
$this->topLevelNavItems = $this->getTopLevelNavItems();
|
||||
$this->hasChildren = function ( $item ) {
|
||||
return $this->hasChildren( $item );
|
||||
};
|
||||
$this->nestedNavItems = function ( $parentItem ) {
|
||||
return $this->getNestedNavItems( $parentItem );
|
||||
};
|
||||
$this->currentPage = function ( $item ) {
|
||||
return $this->currentPage( $item );
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the list of menus.
|
||||
*
|
||||
* @return array An array containing menu items.
|
||||
*/
|
||||
public function getMenus() {
|
||||
$menus = get_nav_menu_locations();
|
||||
return empty( $menus ) ? array() : $menus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the navigation items.
|
||||
*
|
||||
* @return array An array of navigation items.
|
||||
*/
|
||||
public function getNavItems() {
|
||||
$locations = $this->getMenus();
|
||||
|
||||
// If the menu location doesn't exist, return empty array
|
||||
if ( ! isset( $locations[ $this->displayLocation ] ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
// Get the menu ID for this location
|
||||
$menuId = $locations[ $this->displayLocation ];
|
||||
|
||||
// Direct call to wp_get_nav_menu_items with the menu ID
|
||||
$items = wp_get_nav_menu_items( $menuId );
|
||||
|
||||
// Return empty array if no items
|
||||
return is_array( $items ) ? $items : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given parent item has child items.
|
||||
*
|
||||
* @param mixed $parentItem The parent item to check for children.
|
||||
* @return bool Returns true if the parent item has children, false otherwise.
|
||||
*/
|
||||
public function hasChildren( $parentItem ) {
|
||||
foreach ( $this->getNavItems() as $item ) {
|
||||
if ( $item->menu_item_parent === strval( $parentItem->ID ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the top-level navigation items.
|
||||
*
|
||||
* @return array An array of top-level navigation items.
|
||||
*/
|
||||
public function getTopLevelNavItems() {
|
||||
$items = array();
|
||||
foreach ( $this->getNavItems() as $item ) {
|
||||
if ( $item->menu_item_parent === '0' ) {
|
||||
array_push( $items, $item );
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the nested navigation items for a given parent item.
|
||||
*
|
||||
* @param mixed $parentItem The parent navigation item for which nested items are to be retrieved.
|
||||
* @return array The list of nested navigation items.
|
||||
*/
|
||||
public function getNestedNavItems( $parentItem ) {
|
||||
$childrenItems = array();
|
||||
foreach ( $this->getNavItems() as $item ) {
|
||||
if ( $item->menu_item_parent === strval( $parentItem->ID ) ) {
|
||||
array_push( $childrenItems, $item );
|
||||
}
|
||||
}
|
||||
return $childrenItems;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the current page based on the provided item.
|
||||
*
|
||||
* @param mixed $item The item used to determine the current page.
|
||||
* @return mixed The current page information.
|
||||
*/
|
||||
public function currentPage( $item ) {
|
||||
global $wp;
|
||||
return ( $item->url === home_url( $wp->request ) . '/' ) ? 'true' : 'false';
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the output for the current context.
|
||||
*
|
||||
* This method is responsible for generating and returning the
|
||||
* appropriate output for the current context or request.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function render() {
|
||||
global $views;
|
||||
|
||||
// Extract class properties to local variables
|
||||
$location = $this->displayLocation;
|
||||
$topLevelNavItems = $this->topLevelNavItems;
|
||||
$hasChildren = $this->hasChildren;
|
||||
$nestedNavItems = $this->nestedNavItems;
|
||||
$currentPage = $this->currentPage;
|
||||
|
||||
include $views . '/components/menu-items/index.php';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user