d_hover_color'] ) ); $css->set_selector( '.slideout-navigation.main-navigation .main-nav ul ul li:not([class*="current-menu-"]):hover > a, .slideout-navigation.main-navigation .main-nav ul ul li:not([class*="current-menu-"]):focus > a, .slideout-navigation.main-navigation .main-nav ul ul li.sfHover:not([class*="current-menu-"]) > a' ); $css->add_property( 'color', esc_attr( $settings['slideout_submenu_text_hover_color'] ) ); $css->add_property( 'background-color', esc_attr( $settings['slideout_submenu_background_hover_color'] ) ); $css->set_selector( '.slideout-navigation.main-navigation .main-nav ul li[class*="current-menu-"] > a' ); $css->add_property( 'color', esc_attr( $settings['slideout_text_current_color'] ) ); $css->add_property( 'background-color', esc_attr( $settings['slideout_background_current_color'] ) ); $css->set_selector( '.slideout-navigation.main-navigation .main-nav ul ul li[class*="current-menu-"] > a' ); $css->add_property( 'color', esc_attr( $settings['slideout_submenu_text_current_color'] ) ); $css->add_property( 'background-color', esc_attr( $settings['slideout_submenu_background_current_color'] ) ); $css->set_selector( '.slideout-navigation, .slideout-navigation a' ); if ( $settings['slideout_text_color'] ) { $css->add_property( 'color', esc_attr( $settings['slideout_text_color'] ) ); } else { $css->add_property( 'color', esc_attr( $settings['navigation_text_color'] ) ); } $css->set_selector( '.slideout-navigation button.slideout-exit' ); if ( $settings['slideout_text_color'] ) { $css->add_property( 'color', esc_attr( $settings['slideout_text_color'] ) ); } else { $css->add_property( 'color', esc_attr( $settings['navigation_text_color'] ) ); } if ( function_exists( 'generate_spacing_get_defaults' ) ) { $spacing_settings = wp_parse_args( get_option( 'generate_spacing_settings', array() ), generate_spacing_get_defaults() ); $css->add_property( 'padding-left', absint( $spacing_settings['menu_item'] ), false, 'px' ); $css->add_property( 'padding-right', absint( $spacing_settings['menu_item'] ), false, 'px' ); if ( ! empty( $settings['mobile_menu_item'] ) ) { $css->start_media_query( generate_premium_get_media_query( 'mobile' ) ); $css->set_selector( '.slideout-navigation button.slideout-exit' ); $css->add_property( 'padding-left', absint( $spacing_settings['mobile_menu_item'] ), false, 'px' ); $css->add_property( 'padding-right', absint( $spacing_settings['mobile_menu_item'] ), false, 'px' ); $css->stop_media_query(); } } if ( function_exists( 'generate_get_option' ) && function_exists( 'generate_get_defaults' ) ) { $theme_defaults = generate_get_defaults(); if ( isset( $theme_defaults['icons'] ) ) { if ( 'svg' === generate_get_option( 'icons' ) ) { $css->set_selector( '.slide-opened nav.toggled .menu-toggle:before' ); $css->add_property( 'display', 'none' ); } if ( 'font' === generate_get_option( 'icons' ) ) { $css->set_selector( '.slideout-navigation .dropdown-menu-toggle:before' ); $css->add_property( 'content', '"\f107"' ); $css->set_selector( '.slideout-navigation .sfHover > a .dropdown-menu-toggle:before' ); $css->add_property( 'content', '"\f106"' ); } } } $css->start_media_query( generate_premium_get_media_query( 'mobile-menu' ) ); $css->set_selector( '.menu-bar-item.slideout-toggle' ); $css->add_property( 'display', 'none' ); $css->stop_media_query(); return $css->css_output(); } /** * Write dynamic CSS for our navigation branding. * * @since 1.8 */ function generate_do_nav_branding_css() { if ( ! function_exists( 'generate_get_color_defaults' ) || ! function_exists( 'generate_get_defaults' ) || ! function_exists( 'generate_get_default_fonts' ) ) { return; } $defaults = array_merge( generate_get_color_defaults(), generate_get_defaults(), generate_get_default_fonts() ); $settings = wp_parse_args( get_option( 'generate_settings', array() ), $defaults ); $menu_plus_settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); require_once GP_LIBRARY_DIRECTORY . 'class-make-css.php'; $css = new GeneratePress_Pro_CSS(); if ( 'enable' === $menu_plus_settings['mobile_header'] ) { $css->start_media_query( generate_premium_get_media_query( 'mobile-menu' ) ); $css->set_selector( '.site-header, #site-navigation, #sticky-navigation' ); $css->add_property( 'display', 'none !important' ); $css->add_property( 'opacity', '0.0' ); $css->set_selector( '#mobile-header' ); $css->add_property( 'display', 'block !important' ); $css->add_property( 'width', '100% !important' ); $css->set_selector( '#mobile-header .main-nav > ul' ); $css->add_property( 'display', 'none' ); $css->set_selector( '#mobile-header.toggled .main-nav > ul, #mobile-header .menu-toggle, #mobile-header .mobile-bar-items' ); $css->add_property( 'display', 'block' ); $css->set_selector( '#mobile-header .main-nav' ); $css->add_property( '-webkit-box-flex', '0' ); $css->add_property( '-ms-flex', '0 0 100%' ); $css->add_property( 'flex', '0 0 100%' ); $css->add_property( '-webkit-box-ordinal-group', '5' ); $css->add_property( '-ms-flex-order', '4' ); $css->add_property( 'order', '4' ); if ( ! $menu_plus_settings['navigation_as_header'] && 'title' === $menu_plus_settings['mobile_header_branding'] ) { $css->set_selector( '.navigation-branding .main-title a, .navigation-branding .main-title a:hover, .navigation-branding .main-title a:visited' ); $css->add_property( 'color', $settings['navigation_text_color'] ); } $css->stop_media_query(); } $is_using_dynamic_typography = function_exists( 'generate_is_using_dynamic_typography' ) && generate_is_using_dynamic_typography(); if ( ! function_exists( 'generate_typography_premium_css' ) && ! $is_using_dynamic_typography ) { $css->set_selector( '.navigation-branding .main-title' ); $css->add_property( 'font-size', '25px' ); $css->add_property( 'font-weight', 'bold' ); } $navigation_height = 60; $mobile_navigation_height = ''; $content_left = 40; $content_right = 40; if ( function_exists( 'generate_spacing_get_defaults' ) ) { $spacing_settings = wp_parse_args( get_option( 'generate_spacing_settings', array() ), generate_spacing_get_defaults() ); $navigation_height = $spacing_settings['menu_item_height']; if ( isset( $spacing_settings['mobile_menu_item_height'] ) ) { $mobile_navigation_height = $spacing_settings['mobile_menu_item_height']; } $content_left = $spacing_settings['content_left']; $content_right = $spacing_settings['content_right']; } if ( function_exists( 'generate_is_using_flexbox' ) && generate_is_using_flexbox() ) { if ( function_exists( 'generate_get_option' ) ) { if ( 'text' === generate_get_option( 'container_alignment' ) ) { $css->set_selector( '.main-navigation.has-branding .inside-navigation.grid-container, .main-navigation.has-branding.grid-container .inside-navigation:not(.grid-container)' ); $css->add_property( 'padding', generate_padding_css( 0, $content_right, 0, $content_left ) ); $css->set_selector( '.main-navigation.has-branding:not(.grid-container) .inside-navigation:not(.grid-container) .navigation-branding' ); if ( ! is_rtl() ) { $css->add_property( 'margin-left', '10px' ); } else { $css->add_property( 'margin-right', '10px' ); } } else { $css->set_selector( '.main-navigation.has-branding.grid-container .navigation-branding, .main-navigation.has-branding:not(.grid-container) .inside-navigation:not(.grid-container) .navigation-branding' ); if ( ! is_rtl() ) { $css->add_property( 'margin-left', '10px' ); } else { $css->add_property( 'margin-right', '10px' ); } } } } if ( '' !== $menu_plus_settings['sticky_navigation_logo'] ) { $css->set_selector( '.main-navigation .sticky-navigation-logo, .main-navigation.navigation-stick .site-logo:not(.mobile-header-logo)' ); $css->add_property( 'display', 'none' ); $css->set_selector( '.main-navigation.navigation-stick .sticky-navigation-logo' ); $css->add_property( 'display', 'block' ); } $css->set_selector( '.navigation-branding img, .site-logo.mobile-header-logo img' ); $css->add_property( 'height', absint( $navigation_height ), false, 'px' ); $css->add_property( 'width', 'auto' ); $css->set_selector( '.navigation-branding .main-title' ); $css->add_property( 'line-height', absint( $navigation_height ), false, 'px' ); $do_nav_padding = true; if ( function_exists( 'generate_is_using_flexbox' ) && generate_is_using_flexbox() ) { if ( function_exists( 'generate_get_option' ) && 'text' === generate_get_option( 'container_alignment' ) ) { $do_nav_padding = false; } } if ( $do_nav_padding ) { $css->start_media_query( '(max-width: ' . ( $settings['container_width'] + 10 ) . 'px)' ); $css->set_selector( '#site-navigation .navigation-branding, #sticky-navigation .navigation-branding' ); $css->add_property( 'margin-left', '10px' ); if ( is_rtl() ) { $css->set_selector( '#site-navigation .navigation-branding, #sticky-navigation .navigation-branding' ); $css->add_property( 'margin-left', 'auto' ); $css->add_property( 'margin-right', '10px' ); } $css->stop_media_query(); } $css->start_media_query( generate_premium_get_media_query( 'mobile-menu' ) ); if ( function_exists( 'generate_is_using_flexbox' ) && generate_is_using_flexbox() ) { $css->set_selector( '.main-navigation.has-branding.nav-align-center .menu-bar-items, .main-navigation.has-sticky-branding.navigation-stick.nav-align-center .menu-bar-items' ); $css->add_property( 'margin-left', 'auto' ); $css->set_selector( '.navigation-branding' ); $css->add_property( 'margin-right', 'auto' ); $css->add_property( 'margin-left', '10px' ); $css->set_selector( '.navigation-branding .main-title, .mobile-header-navigation .site-logo' ); $css->add_property( 'margin-left', '10px' ); if ( is_rtl() ) { $css->set_selector( '.rtl .navigation-branding' ); $css->add_property( 'margin-left', 'auto' ); $css->add_property( 'margin-right', '10px' ); $css->set_selector( '.rtl .navigation-branding .main-title, .rtl .mobile-header-navigation .site-logo' ); $css->add_property( 'margin-right', '10px' ); $css->add_property( 'margin-left', '0px' ); $css->set_selector( '.rtl .main-navigation.has-branding.nav-align-center .menu-bar-items, .rtl .main-navigation.has-sticky-branding.navigation-stick.nav-align-center .menu-bar-items' ); $css->add_property( 'margin-left', '0px' ); $css->add_property( 'margin-right', 'auto' ); } if ( function_exists( 'generate_get_option' ) && 'text' === generate_get_option( 'container_alignment' ) ) { $css->set_selector( '.main-navigation.has-branding .inside-navigation.grid-container' ); $css->add_property( 'padding', '0px' ); } } else { $css->set_selector( '.main-navigation:not(.slideout-navigation) .main-nav' ); $css->add_property( '-webkit-box-flex', '0' ); $css->add_property( '-ms-flex', '0 0 100%' ); $css->add_property( 'flex', '0 0 100%' ); $css->set_selector( '.main-navigation:not(.slideout-navigation) .inside-navigation' ); $css->add_property( '-ms-flex-wrap', 'wrap' ); $css->add_property( 'flex-wrap', 'wrap' ); $css->add_property( 'display', '-webkit-box' ); $css->add_property( 'display', '-ms-flexbox' ); $css->add_property( 'display', 'flex' ); $css->set_selector( '.nav-aligned-center .navigation-branding, .nav-aligned-left .navigation-branding' ); $css->add_property( 'margin-right', 'auto' ); $css->set_selector( '.nav-aligned-center .main-navigation.has-branding:not(.slideout-navigation) .inside-navigation .main-nav,.nav-aligned-center .main-navigation.has-sticky-branding.navigation-stick .inside-navigation .main-nav,.nav-aligned-left .main-navigation.has-branding:not(.slideout-navigation) .inside-navigation .main-nav,.nav-aligned-left .main-navigation.has-sticky-branding.navigation-stick .inside-navigation .main-nav' ); $css->add_property( 'margin-right', '0px' ); } if ( '' !== $mobile_navigation_height ) { $css->set_selector( '.navigation-branding img, .site-logo.mobile-header-logo' ); $css->add_property( 'height', absint( $mobile_navigation_height ), false, 'px' ); $css->set_selector( '.navigation-branding .main-title' ); $css->add_property( 'line-height', absint( $mobile_navigation_height ), false, 'px' ); } $css->stop_media_query(); return $css->css_output(); } /** * Add dynamic CSS for the legacy navigation logo option deprecated in 1.8. * * @since 1.8 */ function generate_do_mobile_navigation_logo_css() { require_once GP_LIBRARY_DIRECTORY . 'class-make-css.php'; $css = new GeneratePress_Pro_CSS(); $css->start_media_query( generate_premium_get_media_query( 'mobile-menu' ) ); // Sticky & Sticky + Static logo. $css->set_selector( '.sticky-menu-logo .navigation-stick:not(.mobile-header-navigation) .menu-toggle,.menu-logo .main-navigation:not(.mobile-header-navigation) .menu-toggle' ); $css->add_property( 'display', 'inline-block' ); $css->add_property( 'clear', 'none' ); $css->add_property( 'width', 'auto' ); $css->add_property( 'float', 'right' ); $css->set_selector( '.sticky-menu-logo .navigation-stick:not(.mobile-header-navigation) .mobile-bar-items,.menu-logo .main-navigation:not(.mobile-header-navigation) .mobile-bar-items' ); $css->add_property( 'position', 'relative' ); $css->add_property( 'float', 'right' ); // Static logo. $css->set_selector( '.regular-menu-logo .main-navigation:not(.navigation-stick):not(.mobile-header-navigation) .menu-toggle' ); $css->add_property( 'display', 'inline-block' ); $css->add_property( 'clear', 'none' ); $css->add_property( 'width', 'auto' ); $css->add_property( 'float', 'right' ); $css->set_selector( '.regular-menu-logo .main-navigation:not(.navigation-stick):not(.mobile-header-navigation) .mobile-bar-items' ); $css->add_property( 'position', 'relative' ); $css->add_property( 'float', 'right' ); $css->set_selector( 'body[class*="nav-float-"].menu-logo-enabled:not(.sticky-menu-logo) .main-navigation .main-nav' ); $css->add_property( 'display', 'block' ); // Navigation floating left. $css->set_selector( '.sticky-menu-logo.nav-float-left .navigation-stick:not(.mobile-header-navigation) .menu-toggle,.menu-logo.nav-float-left .main-navigation:not(.mobile-header-navigation) .menu-toggle,.regular-menu-logo.nav-float-left .main-navigation:not(.navigation-stick):not(.mobile-header-navigation) .menu-toggle' ); $css->add_property( 'float', 'left' ); $css->stop_media_query(); return $css->css_output(); } add_action( 'generate_inside_slideout_navigation', 'generate_do_slideout_menu_close_button' ); /** * Add a button inside the slideout nav to close it. * * @since 1.8 */ function generate_do_slideout_menu_close_button() { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); if ( 'inside' === $settings['slideout_close_button'] || 'overlay' === $settings['slideout_menu_style'] ) { $svg_icon = ''; if ( function_exists( 'generate_get_svg_icon' ) ) { $svg_icon = generate_get_svg_icon( 'pro-close' ); } // phpcs:ignore -- No escaping needed. echo apply_filters( 'generate_close_slideout_navigation_button', sprintf( '', $svg_icon, esc_html__( 'Close', 'gp-premium' ), $svg_icon ? 'has-svg-icon' : '' ) ); } } add_action( 'wp', 'generate_menu_plus_remove_header', 200 ); /** * Remove our header if we're using the navigation as a header. * * @since 1.8 */ function generate_menu_plus_remove_header() { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); if ( $settings['navigation_as_header'] ) { remove_action( 'generate_header', 'generate_construct_header' ); add_filter( 'generate_navigation_location', 'generate_set_navigation_location_as_header' ); } } /** * Set our navigation location if we're using our navigation as the header. * * @since 1.8 */ function generate_set_navigation_location_as_header() { return 'nav-below-header'; } add_action( 'generate_inside_navigation', 'generate_do_navigation_branding' ); /** * Add our navigation logo if set. * * @since 1.8 */ function generate_do_navigation_branding() { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); if ( ! function_exists( 'generate_get_option' ) ) { return; } $logo = false; $sticky_logo = false; $site_title = false; if ( $settings['navigation_as_header'] && get_theme_mod( 'custom_logo' ) ) { $logo_url = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' ); $logo_url = esc_url( apply_filters( 'generate_logo', $logo_url[0] ) ); $retina_logo_url = esc_url( apply_filters( 'generate_retina_logo', generate_get_option( 'retina_logo' ) ) ); if ( $logo_url ) { $attr = apply_filters( 'generate_logo_attributes', array( 'class' => 'header-image is-logo-image', 'alt' => esc_attr( apply_filters( 'generate_logo_title', get_bloginfo( 'name', 'display' ) ) ), 'src' => $logo_url, 'title' => esc_attr( apply_filters( 'generate_logo_title', get_bloginfo( 'name', 'display' ) ) ), ) ); if ( '' !== $retina_logo_url ) { $attr['srcset'] = $logo_url . ' 1x, ' . $retina_logo_url . ' 2x'; } if ( function_exists( 'the_custom_logo' ) && get_theme_mod( 'custom_logo' ) ) { $data = wp_get_attachment_metadata( get_theme_mod( 'custom_logo' ) ); if ( ! empty( $data ) ) { if ( isset( $data['width'] ) ) { $attr['width'] = $data['width']; } if ( isset( $data['height'] ) ) { $attr['height'] = $data['height']; } } } $attr = array_map( 'esc_attr', $attr ); $html_attr = ''; foreach ( $attr as $name => $value ) { $html_attr .= " $name=" . '"' . $value . '"'; } // Print our HTML. $logo = apply_filters( 'generate_logo_output', sprintf( '
', esc_url( apply_filters( 'generate_logo_href', home_url( '/' ) ) ), esc_attr( apply_filters( 'generate_logo_title', get_bloginfo( 'name', 'display' ) ) ), $html_attr ), $logo_url, $html_attr ); } } if ( 'false' !== $settings['sticky_menu'] && '' !== $settings['sticky_navigation_logo'] ) { if ( is_numeric( $settings['sticky_navigation_logo'] ) ) { $image = $settings['sticky_navigation_logo']; $image_url = wp_get_attachment_image_url( $image, 'full' ); } else { $image_url = $settings['sticky_navigation_logo']; $image = attachment_url_to_postid( $image_url ); } $image_width = ''; $image_height = ''; if ( $image ) { $image = wp_get_attachment_metadata( $image ); if ( ! empty( $image['width'] ) ) { $image_width = $image['width']; } if ( ! empty( $image['height'] ) ) { $image_height = $image['height']; } } $sticky_logo = apply_filters( 'generate_sticky_navigation_logo_output', sprintf( ' ', esc_url( apply_filters( 'generate_logo_href', home_url( '/' ) ) ), esc_attr( apply_filters( 'generate_logo_title', get_bloginfo( 'name', 'display' ) ) ), esc_url( $image_url ), ! empty( $image_width ) ? absint( $image_width ) : '', ! empty( $image_height ) ? absint( $image_height ) : '' ), $image_url, $image ); } if ( $settings['navigation_as_header'] && ! generate_get_option( 'hide_title' ) ) { $site_title = apply_filters( 'generate_site_title_output', sprintf( '<%1$s class="main-title" itemprop="headline"> %3$s %1$s>', ( is_front_page() && is_home() ) ? 'h1' : 'p', esc_url( apply_filters( 'generate_site_title_href', home_url( '/' ) ) ), get_bloginfo( 'name' ) ) ); } if ( $logo || $sticky_logo || $site_title ) { echo ' '; } } add_filter( 'generate_mobile_menu_media_query', 'generate_set_mobile_menu_breakpoint' ); /** * Set the mobile menu breakpoint. * * @since 1.8 * * @param string $breakpoint Current breakpoint. * @return string */ function generate_set_mobile_menu_breakpoint( $breakpoint ) { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); // This setting shouldn't apply if the mobile header isn't on and we're using GP < 2.3. if ( defined( 'GENERATE_VERSION' ) && version_compare( GENERATE_VERSION, '2.3-alpha.1', '<' ) ) { if ( 'enable' !== $settings['mobile_header'] ) { return $breakpoint; } } $mobile_menu_breakpoint = $settings['mobile_menu_breakpoint']; if ( '' !== $mobile_menu_breakpoint ) { return '(max-width: ' . absint( $mobile_menu_breakpoint ) . 'px)'; } return $breakpoint; } add_filter( 'generate_not_mobile_menu_media_query', 'generate_set_not_mobile_menu_breakpoint' ); /** * Set the breakpoint when the mobile menu doesn't apply. * * @since 1.8.3 * * @param string $breakpoint Existing breakpoint. * @return string */ function generate_set_not_mobile_menu_breakpoint( $breakpoint ) { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); // This setting shouldn't apply if the mobile header isn't on and we're using GP < 2.3. if ( defined( 'GENERATE_VERSION' ) && version_compare( GENERATE_VERSION, '2.3-alpha.1', '<' ) ) { if ( 'enable' !== $settings['mobile_header'] ) { return $breakpoint; } } $mobile_menu_breakpoint = $settings['mobile_menu_breakpoint']; if ( '' !== $mobile_menu_breakpoint && is_int( $mobile_menu_breakpoint ) ) { return '(min-width: ' . ( absint( $mobile_menu_breakpoint ) + 1 ) . 'px)'; } return $breakpoint; } add_filter( 'generate_has_active_menu', 'generate_menu_plus_set_active_menu' ); /** * Tell GP about our active menus. * * @since 2.1.0 * @param boolean $has_active_menu Whether we have an active menu. */ function generate_menu_plus_set_active_menu( $has_active_menu ) { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); if ( 'disable' !== $settings['mobile_header'] || 'false' !== $settings['slideout_menu'] ) { return true; } return $has_active_menu; } add_filter( 'generate_typography_css_selector', 'generate_menu_plus_typography_selectors' ); /** * Add the Menu Plus typography CSS selectors. * * @since 2.1.0 * @param string $selector The selector we're targeting. */ function generate_menu_plus_typography_selectors( $selector ) { switch ( $selector ) { case 'off-canvas-panel-menu-items': $selector = '.slideout-navigation.main-navigation .main-nav ul li a'; break; case 'off-canvas-panel-sub-menu-items': $selector = '.slideout-navigation.main-navigation .main-nav ul ul li a'; break; } return $selector; } add_filter( 'generate_parse_attr', 'generate_set_off_canvas_toggle_attributes', 20, 2 ); /** * Add attributes to our menu-toggle element when using the Off Canvas panel. * * @since 2.2.0 * @param array $attributes The current attributes. * @param string $context The context in which attributes are applied. */ function generate_set_off_canvas_toggle_attributes( $attributes, $context ) { if ( 'menu-toggle' === $context ) { $settings = wp_parse_args( get_option( 'generate_menu_plus_settings', array() ), generate_menu_plus_get_defaults() ); if ( 'mobile' === $settings['slideout_menu'] || 'both' === $settings['slideout_menu'] ) { $attributes['aria-controls'] = 'generate-slideout-menu'; } } return $attributes; }