Initial commit to github

This commit is contained in:
Keith Solomon
2025-08-22 15:40:01 -05:00
commit e8efdbeb34
230 changed files with 32213 additions and 0 deletions

185
lib/class-menuitems.php Normal file
View 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';
}
}