'', 'mobile-toggle-type-1' => '', 'mobile-toggle-type-2' => '', 'mobile-toggle-type-3' => '', ]; } } if (! function_exists('blocksy_main_menu_fallback')) { function blocksy_main_menu_fallback($args) { extract($args); $list_pages_args = [ 'sort_column' => 'menu_order, post_title', 'menu_id' => 'primary-menu', 'menu_class' => 'primary-menu menu', 'container' => 'ul', 'echo' => false, 'link_before' => '', 'link_after' => '', 'before' => '', 'item_spacing' => 'discard', 'walker' => new Blocksy_Walker_Page(), 'title_li' => '' ]; if (isset($args['blocksy_mega_menu'])) { $list_pages_args['blocksy_mega_menu'] = $args['blocksy_mega_menu']; } if (isset($args['blocksy_advanced_item'])) { $list_pages_args['blocksy_advanced_item'] = $args['blocksy_advanced_item']; } if (isset($args['skip_ghost'])) { $list_pages_args['skip_ghost'] = $args['skip_ghost']; } $menu = wp_list_pages($list_pages_args); if (! isset($child_indicator_type)) { $child_indicator_type = 'default'; } $svg = ''; $before_link = ''; $link_button = ''; if ($child_indicator_type !== 'skip') { if ( ! ( isset($args['child_indicator_wrapper']) && $args['child_indicator_wrapper'] ) ) { $svg = blocksy_html_tag( 'span', [ 'class' => 'ct-toggle-dropdown-desktop', 'role' => 'button' ], blocksy_menu_get_child_svgs()[$child_indicator_type] ); if (! isset($args['skip_ghost'])) { $link_button = blocksy_html_tag( 'button', [ 'class' => 'ct-toggle-dropdown-desktop-ghost', 'aria-label' => __('Expand dropdown menu', 'blocksy'), 'aria-haspopup' => 'true', 'aria-expanded' => 'false', 'role' => 'menuitem' ], '' ); } } else { $link_button = blocksy_html_tag( 'button', [ 'class' => 'ct-toggle-dropdown-mobile', 'aria-label' => __('Expand dropdown menu', 'blocksy'), 'aria-haspopup' => 'true', 'aria-expanded' => 'false' ], blocksy_menu_get_child_svgs()['mobile-toggle-' . $child_indicator_type] ) . ''; $before_link = ''; } } if ($args['depth'] === 1) { $svg = ''; $link_button = ''; $before_link = ''; } $menu = str_replace( '~', $svg, $menu ); $menu = str_replace( '^^', $before_link, $menu ); $menu = str_replace( '^', $link_button, $menu ); if (empty(trim($menu))) { $args['echo'] = false; $menu = blocksy_link_to_menu_editor($args); } else { $attrs = ''; if (! empty($args['menu_id'])) { $attrs .= ' id="' . esc_attr($args['menu_id']) . '"'; } if (! empty($args['menu_class'])) { $attrs .= ' class="' . esc_attr($args['menu_class']) . '"'; } $menu = "" . $menu . ""; } if ($echo) { echo $menu; } return $menu; } } if (! function_exists('blocksy_handle_nav_menu_item_title')) { function blocksy_handle_nav_menu_item_title($item_output, $item, $args, $depth) { $classes = empty($item->classes) ? [] : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $class_names = join(' ', array_filter($classes)); $child_indicator_type = 'default'; if (isset($args->child_indicator_type)) { $child_indicator_type = $args->child_indicator_type; } if ( $child_indicator_type !== 'skip' && ! ( isset($args->child_indicator_wrapper) && $args->child_indicator_wrapper ) ) { $svg = blocksy_menu_get_child_svgs()[$child_indicator_type]; if ( strpos($class_names, 'has-children') !== false || strpos($class_names, 'has_children') !== false ) { if (! empty($item_output)) { return $item_output . '' . $svg . ''; } } } return $item_output; } } if (! function_exists('blocksy_handle_nav_menu_start_el')) { function blocksy_handle_nav_menu_start_el($item_output, $item, $depth, $args) { $classes = empty($item->classes) ? [] : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $class_names = join(' ', array_filter($classes)); if ( isset($args->uber_instance) && $args->uber_instance ) { return $item_output; } $child_indicator_type = 'default'; if (isset($args->child_indicator_type)) { $child_indicator_type = $args->child_indicator_type; } if ( $child_indicator_type !== 'skip' && ( strpos($class_names, 'has-children') !== false || strpos($class_names, 'has_children') !== false ) ) { $toggle_ghost_content = ''; $toggle_ghost_class = 'ct-toggle-dropdown-desktop-ghost'; if ( isset($args->child_indicator_wrapper) && $args->child_indicator_wrapper ) { $svg = blocksy_menu_get_child_svgs()['mobile-toggle-' . $child_indicator_type]; $toggle_ghost_content = $svg; $toggle_ghost_class = 'ct-toggle-dropdown-mobile'; } $toggle_ghost = ''; if (! isset($args->skip_ghost)) { $toggle_ghost = blocksy_html_tag( 'button', [ 'class' => $toggle_ghost_class, 'aria-label' => __('Expand dropdown menu', 'blocksy'), 'aria-haspopup' => 'true', 'aria-expanded' => 'false', 'role' => 'menuitem' ], $toggle_ghost_content ); } if ( isset($args->child_indicator_wrapper) && $args->child_indicator_wrapper ) { return '' . $item_output . $toggle_ghost . ''; } return $item_output . $toggle_ghost; } return $item_output; } } add_filter( 'page_css_class', function ($css_class, $page, $depth, $args, $current_page) { if (isset($args['pages_with_children'][$page->ID])) { $css_class[] = 'menu-item-has-children'; } if (! empty($current_page)) { $_current_page = get_post($current_page); if ( $_current_page && in_array($page->ID, $_current_page->ancestors) ) { $css_class[] = 'current-menu-ancestor'; } if ($page->ID === $current_page) { $css_class[] = 'current-menu-item'; } elseif ( $_current_page && $page->ID === $_current_page->post_parent ) { $css_class[] = 'current-menu-parent'; } } elseif (get_option('page_for_posts') === $page->ID) { $css_class[] = 'current-menu-parent'; } if ( ! isset($args['blocksy_mega_menu']) || ! $args['blocksy_mega_menu'] ) { return $css_class; } $classes_str = implode(' ', $css_class); if ( strpos($classes_str, 'has-children') === false && strpos($classes_str, 'has_children') === false ) { return $css_class; } if ( isset($args['blocksy_always_inline']) && $args['blocksy_always_inline'] ) { $classes[] = 'animated-submenu-inline'; } else { if ($depth === 0) { $classes[] = 'animated-submenu-block'; } if ($depth > 0) { $classes[] = 'animated-submenu-inline'; } } return $css_class; }, 10, 5 ); add_filter('wp_nav_menu_items', function ($item_output, $args) { if ( ! isset($args->blocksy_advanced_item) || ! $args->blocksy_advanced_item ) { return $item_output; } return preg_replace( '/(<]*)>/i', '$1 role="none">', $item_output ); }, 10, 2); add_filter( 'nav_menu_css_class', function ($classes, $item, $args, $depth) { if ( ! isset($args->blocksy_mega_menu) || ! $args->blocksy_mega_menu ) { return $classes; } $classes_str = implode(' ', $classes); if ( strpos($classes_str, 'has-children') === false && strpos($classes_str, 'has_children') === false ) { return $classes; } if ( ( apply_filters('blocksy:menu:has_animated_submenu', true, $item, $args) || $depth === 0 ) && ( ! isset($args->blocksy_ajax_submenu) || ! $args->blocksy_ajax_submenu ) ) { if ( isset($args->blocksy_always_inline) && $args->blocksy_always_inline ) { $classes[] = 'animated-submenu-inline'; } else { if ($depth === 0) { $classes[] = 'animated-submenu-block'; } if ($depth > 0) { $classes[] = 'animated-submenu-inline'; } } } return $classes; }, 50, 4 ); add_filter('wp_nav_menu', function ($nav_menu, $args) { if ( ! isset($args->blocksy_advanced_item) || ! $args->blocksy_advanced_item ) { return $nav_menu; } $nav_menu = preg_replace( '/class="sub-menu(.*)"/', 'class="sub-menu$1" role="menu"', $nav_menu ); $nav_menu = str_replace( 'class="menu"', 'class="menu" role="menubar"', $nav_menu ); $nav_menu = preg_replace( '/(<]*) class="">/i', '$1 role="menubar">', $nav_menu ); return $nav_menu; }, 10, 2); add_filter( 'nav_menu_link_attributes', function ($attr, $item, $args, $depth) { if ( ! isset($args->blocksy_advanced_item) || ! $args->blocksy_advanced_item ) { return $attr; } if ( isset($args->uber_instance) && $args->uber_instance ) { return $attr; } $class = 'ct-menu-link'; if (! isset($attr['class'])) { $attr['class'] = ''; } $attr['class'] .= ' ' . $class; $attr['class'] = trim($attr['class']); $attr['role'] = 'menuitem'; if (isset($args->skip_ghost)) { $item_classes = ''; if ($item && isset($item->classes) && is_array($item->classes)) { $item_classes = implode(' ', $item->classes); } if ( strpos($item_classes, 'has-children') !== false || strpos($item_classes, 'has_children') !== false ) { $attr['aria-haspopup'] = 'true'; $attr['aria-expanded'] = 'false'; } } return $attr; }, 5, 4 ); add_filter( 'page_menu_link_attributes', function ($attr, $item, $depth, $args) { if ( ! isset($args['blocksy_advanced_item']) || ! $args['blocksy_advanced_item'] ) { return $attr; } $class = 'ct-menu-link'; if (! isset($attr['class'])) { $attr['class'] = ''; } $attr['class'] .= ' ' . $class; $attr['class'] = trim($attr['class']); if (isset($args['skip_ghost'])) { $attr['aria-haspopup'] = 'true'; $attr['aria-expanded'] = 'false'; } return $attr; }, 5, 4 ); if (! function_exists('blocksy_get_menus_items')) { function blocksy_get_menus_items($location = '') { $menus = [ // 'blocksy_location' => $location 'blocksy_location' => __('Default', 'blocksy') ]; $all_menus = get_terms('nav_menu', ['hide_empty' => true]); if (is_array($all_menus) && count($all_menus)) { foreach($all_menus as $row) { $menus[$row->term_id] = $row->name; } } $result = []; foreach ($menus as $id => $menu){ $result[$id] = $menu; } return $result; } }