From e7921c7ba7d7cc94a8c835beb8e5cba4690f3f06 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 4 Dec 2023 02:17:48 +0200 Subject: [PATCH] - fixed #1370; --- includes/core/um-filters-navmenu.php | 70 +++++++++++----------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/includes/core/um-filters-navmenu.php b/includes/core/um-filters-navmenu.php index a6ff193f..1f202fc6 100644 --- a/includes/core/um-filters-navmenu.php +++ b/includes/core/um-filters-navmenu.php @@ -1,5 +1,7 @@ -menu_item_parent ) && in_array( $item->menu_item_parent, $hide_children_of ) ) { - $visible = false; + // Hide any item that is the child of a hidden item. + if ( isset( $item->menu_item_parent ) && in_array( $item->menu_item_parent, $hide_children_of, true ) ) { + $visible = false; $hide_children_of[] = $item->ID; // for nested menus } if ( isset( $mode ) && $visible ) { - - switch( $mode ) { - + switch ( $mode ) { case 2: - if ( is_user_logged_in() && ! empty( $roles ) ) { - if ( current_user_can( 'administrator' ) ) { - $visible = true; + if ( ! empty( $roles ) && is_user_logged_in() ) { + $current_user_roles = um_user( 'roles' ); + if ( empty( $current_user_roles ) ) { + $visible = false; } else { - $current_user_roles = um_user( 'roles' ); - if ( empty( $current_user_roles ) ) { - $visible = false; - } else { - $visible = ( count( array_intersect( $current_user_roles, (array)$roles ) ) > 0 ) ? true : false; - } + $visible = ( count( array_intersect( $current_user_roles, (array) $roles ) ) > 0 ) ? true : false; } } else { - $visible = is_user_logged_in() ? true : false; + $visible = is_user_logged_in(); } break; - case 1: - $visible = ! is_user_logged_in() ? true : false; + $visible = ! is_user_logged_in(); break; - } - } - /** - * UM hook + * Filters menu item visibility base on Ultimate Member visibility settings. * - * @type filter - * @title um_nav_menu_roles_item_visibility - * @description Add filter to work with plugins that don't use traditional roles - * @input_vars - * [{"var":"$visible","type":"bool","desc":"Visible?"}, - * {"var":"$item","type":"object","desc":"Menu Item"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Make the menu item visible for some custom reason. * function my_nav_menu_roles_item_visibility( $visible, $item ) { - * // your code here + * $visible = true; * return $visible; * } - * ?> + * add_filter( 'um_nav_menu_roles_item_visibility', 'my_nav_menu_roles_item_visibility', 10, 2 ); */ $visible = apply_filters( 'um_nav_menu_roles_item_visibility', $visible, $item ); @@ -134,9 +121,7 @@ if ( ! is_admin() ) { $hide_children_of[] = $item->ID; // store ID of item } else { $filtered_items[] = $item; - continue; } - } um_reset_user(); @@ -145,7 +130,6 @@ if ( ! is_admin() ) { } add_filter( 'wp_nav_menu_objects', 'um_conditional_nav_menu', 9999, 2 ); - /** * Conditional menu items *