oont-contents/plugins/astra-addon/addons/header-sections/classes/class-astra-ext-header-sections-markup.php
2025-02-08 15:10:23 +01:00

1297 lines
46 KiB
PHP

<?php
/**
* Advanced Header Markup
*
* @package Astra Addon
*/
if ( ! class_exists( 'Astra_Ext_Header_Sections_Markup' ) ) {
/**
* Advanced Header Markup Initial Setup
*
* @since 1.0.0
*/
// @codingStandardsIgnoreStart
class Astra_Ext_Header_Sections_Markup {
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound
// @codingStandardsIgnoreEnd
/**
* Member Varible
*
* @var object instance
*/
private static $instance;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
add_action( 'astra_masthead_toggle_buttons', array( $this, 'astra_masthead_toggle_buttons_primary' ), 10 );
add_action( 'astra_masthead_content', array( $this, 'enable_primary_menu_button' ), 8 );
add_action( 'astra_masthead_content', array( $this, 'below_above_header_content' ), 9 );
add_filter( 'astra_masthead_get_menu_items', array( $this, 'astra_masthead_get_menu_items' ) );
/**
* Merge Above / Below Header into Primary menu for responsive devices
*/
add_filter( 'wp_page_menu_args', array( $this, 'merge_custom_page_menu_header_sections' ), 10, 2 );
add_filter( 'wp_nav_menu_items', array( $this, 'merge_custom_nav_menu_header_sections' ), 9, 2 );
/* Add Body Classes */
add_filter( 'body_class', array( $this, 'body_classes' ), 10, 1 );
add_filter( 'astra_header_class', array( $this, 'header_classes' ), 10, 1 );
add_filter( 'astra_above_header_merged_responsive', array( $this, 'above_header_merged_disable' ) );
add_filter( 'astra_below_header_merged_responsive', array( $this, 'below_header_merged_disable' ) );
// Above Header markup control.
add_filter( 'astra_above_header_disable', array( $this, 'above_header_disable' ) );
// Below Header markup control.
add_filter( 'astra_below_header_disable', array( $this, 'below_header_disable' ) );
/* Register Menu Location & Widget*/
add_action( 'init', array( $this, 'register_menu_locations_widgets' ) );
/* Add HTML Markup Above Header */
if ( false === astra_addon_builder_helper()->is_header_footer_builder_active ) {
add_action( 'astra_masthead', array( $this, 'above_header_html_markup_loader' ), 9 );
}
add_action( 'astra_above_header_toggle_buttons', array( $this, 'above_header_toggle_button' ), 10 );
/* Add HTML Markup Below Header */
if ( false === astra_addon_builder_helper()->is_header_footer_builder_active ) {
add_action( 'astra_masthead', array( $this, 'below_header_html_markup_loader' ), 11 );
}
add_action( 'astra_below_header_toggle_buttons', array( $this, 'below_header_toggle_button' ), 11 );
add_action( 'astra_addon_get_css_files', array( $this, 'add_styles' ) );
add_action( 'astra_addon_get_js_files', array( $this, 'add_scripts' ) );
add_action( 'astra_get_fonts', array( $this, 'add_fonts' ), 1 );
/**
* Metabox setup
*/
add_filter( 'astra_meta_box_options', array( $this, 'add_options' ) );
add_action( 'astra_meta_box_markup_disable_sections_after_primary_header', array( $this, 'add_options_markup' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'load_scripts' ) );
}
/**
* Load page builder scripts and styles.
*
* @return void
*/
public function load_scripts() {
$above_menu_animation = astra_get_option( 'above-header-submenu-container-animation' );
$below_menu_animation = astra_get_option( 'below-header-submenu-container-animation' );
if ( ! empty( $above_menu_animation ) || ! empty( $below_menu_animation ) ) {
wp_enqueue_style( 'astra-menu-animation' );
}
}
/**
* Header toggle buttons
*
* => Used in files:
*
* /header.php
*
* @since 1.0.0
*/
public function astra_masthead_toggle_buttons_primary() {
$disable_primary_navigation = astra_get_option( 'disable-primary-nav' );
$custom_header_section = astra_get_option( 'header-main-rt-section' );
$above_header = $this->astra_above_header_enabled();
$below_header = $this->astra_below_header_enabled();
$merged_above_header = $this->astra_above_header_merged_enabled();
$merged_below_header = $this->astra_below_header_merged_enabled();
$display_outside_menu = astra_get_option( 'header-display-outside-menu' );
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
if ( $disable_primary_navigation && ( 'none' == $custom_header_section || ( 'none' != $custom_header_section && $display_outside_menu ) ) && ( $above_header || $below_header ) && ( $merged_above_header || $merged_below_header ) && ( $above_header_on_mobile || $below_header_on_mobile ) ) {
$menu_title = trim( apply_filters( 'astra_main_menu_toggle_label', astra_get_option( 'header-main-menu-label' ) ) );
$menu_icon = apply_filters( 'astra_main_menu_toggle_icon', 'menu-toggle-icon' );
$menu_label_class = '';
$screen_reader_title = __( 'Main Menu', 'astra-addon' );
if ( '' !== $menu_title ) {
$menu_label_class = 'ast-menu-label';
$screen_reader_title = $menu_title;
}
$menu_label_class = apply_filters( 'astra_main_menu_toggle_classes', $menu_label_class );
?>
<div class="ast-button-wrap">
<button type="button" class="menu-toggle main-header-menu-toggle <?php echo esc_attr( $menu_label_class ); ?>" aria-controls='primary-menu' aria-expanded='false'>
<span class="screen-reader-text"><?php echo esc_html( $screen_reader_title ); ?></span>
<span class="<?php echo esc_attr( $menu_icon ); ?>"></span>
<?php if ( '' != $menu_title ) { ?>
<div class="mobile-menu-wrap">
<span class="mobile-menu"><?php echo esc_html( $menu_title ); ?></span>
</div>
<?php } ?>
</button>
</div>
<?php
}
}
/**
* Header toggle buttons
*
* @since 1.0.0
*/
public function enable_primary_menu_button() {
$disable_primary_navigation = astra_get_option( 'disable-primary-nav' );
$custom_header_section = astra_get_option( 'header-main-rt-section' );
$above_header = $this->astra_above_header_enabled();
$below_header = $this->astra_below_header_enabled();
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
if ( $disable_primary_navigation && 'none' == $custom_header_section && ( $above_header || $below_header ) && ( $above_header_on_mobile || $below_header_on_mobile ) ) {
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
}
}
/**
* Header Sections content if Primary Menu and Custom menu items are disabled
*
* @since 1.0.0
*/
public function below_above_header_content() {
$disable_primary_navigation = astra_get_option( 'disable-primary-nav' );
$custom_header_section = astra_get_option( 'header-main-rt-section' );
$above_header = $this->astra_above_header_enabled();
$below_header = $this->astra_below_header_enabled();
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
if ( $disable_primary_navigation && 'none' == $custom_header_section && ( $above_header || $below_header ) && ( $above_header_on_mobile || $below_header_on_mobile ) ) {
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
$above_header_markup = $this->astra_get_above_header_items();
$below_header_markup = $this->astra_get_below_header_items();
?>
<div class="main-header-bar-navigation ast-header-sections-navigation">
<nav itemtype="https://schema.org/SiteNavigationElement" itemscope="itemscope" id="site-navigation" class="ast-flex-grow-1 navigation-accessibility" aria-label="<?php esc_attr_e( 'Site Navigation', 'astra-addon' ); ?>">
<div class="main-navigation">
<ul id="primary-menu" class="main-header-menu" aria-expanded="false">
<?php do_action( 'astra_merge_header_before_menu' ); ?>
<?php echo do_shortcode( $above_header_markup . $below_header_markup ); ?>
<?php do_action( 'astra_merge_header_after_menu' ); ?>
</ul>
</div>
<?php
}
}
/**
* Header Sections content if Primary Menu disabled and Custom menu item is not none
*
* @since 1.0.0
* @param array $items Nav menu item array.
*/
public function astra_masthead_get_menu_items( $items ) {
$disable_primary_navigation = astra_get_option( 'disable-primary-nav' );
$custom_header_section = astra_get_option( 'header-main-rt-section' );
$above_header = $this->astra_above_header_enabled();
$below_header = $this->astra_below_header_enabled();
$display_outside_menu = astra_get_option( 'header-display-outside-menu' );
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
if ( ( $above_header || $below_header ) && ( $above_header_on_mobile || $below_header_on_mobile ) ) {
if ( $disable_primary_navigation && ( 'none' != $custom_header_section && ! $display_outside_menu ) ) {
$above_header_markup = $this->astra_get_above_header_items();
$below_header_markup = $this->astra_get_below_header_items();
$items = $above_header_markup . $below_header_markup . $items;
} elseif ( $disable_primary_navigation && 'none' != $custom_header_section && $display_outside_menu ) {
// Disable Primary menu,
// Custom Menu Item & Take custom menu item outside enabled,
// Merge Above Header menu with primary menu in responsive,
// Merge Below Header menu with primary menu in responsive.
// for all above condition add a primary menu wrapper class to the Above Header & Below Header menu.
$above_header_markup = $this->astra_get_above_header_items();
$below_header_markup = $this->astra_get_below_header_items();
$nav_wrap = apply_filters(
'astra_merge_header_custom_menu_item_wrap',
'<div class="main-header-bar-navigation ast-header-sections-navigation">
<nav itemtype="https://schema.org/SiteNavigationElement" itemscope="itemscope" id="site-navigation" class="ast-flex-grow-1 navigation-accessibility" aria-label="' . esc_attr__( 'Site Navigation', 'astra-addon' ) . '">'
);
$nav_wrap_close = apply_filters( 'astra_merge_header_before_custom_menu_item', '</div></nav>' );
$items = $nav_wrap . $above_header_markup . $below_header_markup . $nav_wrap_close . $items;
}
}
return $items;
}
/**
* Header Custom Menu Item
*
* => Used in files:
*
* /header.php
*
* @since 1.0.0
* @param array $items Nav menu item array.
* @param array $args Nav menu item arguments array.
* @return array Modified menu item array.
*/
public function merge_custom_nav_menu_header_sections( $items, $args ) {
if ( isset( $args->theme_location ) ) {
if ( 'primary' === $args->theme_location ) {
$above_header_markup = $this->astra_get_above_header_items();
if ( $above_header_markup ) {
$items .= $above_header_markup;
}
$below_header_markup = $this->astra_get_below_header_items();
if ( $below_header_markup ) {
$items .= $below_header_markup;
}
}
}
return $items;
}
/**
* Header Custom Menu Item
*
* => Used in files:
*
* /header.php
*
* @since 1.0.0
* @param array $args Array of arguments.
* @return array Modified menu item array.
*/
public function merge_custom_page_menu_header_sections( $args ) {
if ( isset( $args['theme_location'] ) ) {
if ( 'primary' === $args['theme_location'] ) {
$markup = '';
$above_header_markup = $this->astra_get_above_header_items();
if ( $above_header_markup ) {
$markup .= $above_header_markup;
}
$below_header_markup = $this->astra_get_below_header_items();
if ( $below_header_markup ) {
$markup .= $below_header_markup;
}
if ( $above_header_markup || $below_header_markup ) {
$args['after'] = $markup . $args['after'];
}
}
}
return $args;
}
/**
* Custom Above Header Menu Item Markup
*
* => Used in hooks:
*
* @see astra_masthead_get_menu_items
* @see astra_masthead_custom_nav_menu_items
*
* @since 1.0.0
*/
public function astra_get_above_header_items() {
if ( function_exists( 'ubermenu_automatic_integration_filter' ) ) {
remove_filter( 'wp_nav_menu_args', 'ubermenu_automatic_integration_filter', 1000 );
}
$markup = '';
// Above Header Menu nmerged with Primary Menu for resonsive devices.
$above_header_menu_args = array(
'theme_location' => 'above_header_menu',
'container' => false,
'fallback_cb' => false,
'echo' => true,
'items_wrap' => '<ul class="ast-above-header-menu-items"> %3$s </ul>',
);
$mobile_menu_style = astra_get_option( 'mobile-menu-style' );
// If menu style is no toggle, remove item wrap div from above header menu.
if ( 'no-toggle' == $mobile_menu_style ) {
$above_header_menu_args['items_wrap'] = '%3$s';
}
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$above_header_enabled = $this->astra_above_header_enabled();
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_header_layout_meta = astra_get_option_meta( 'ast-above-header-display' );
// Above Header is merged with primary menu.
if ( $this->astra_above_header_merged_enabled() && $above_header_on_mobile ) {
ob_start();
if ( has_nav_menu( 'above_header_menu' ) ) {
if ( $above_header_enabled ) {
$above_section_1 = astra_get_option( 'above-header-section-1' );
$above_section_2 = astra_get_option( 'above-header-section-2' );
if ( ( 'menu' === $above_section_1 && 'above-header-layout-1' === $above_header_layout ) || ( 'menu' === $above_section_2 && 'above-header-layout-1' === $above_header_layout ) || ( 'menu' === $above_section_1 && 'above-header-layout-2' === $above_header_layout ) ) {
wp_nav_menu( $above_header_menu_args );
}
}
}
$markup = ob_get_clean();
}
if ( function_exists( 'ubermenu_automatic_integration_filter' ) ) {
add_filter( 'wp_nav_menu_args', 'ubermenu_automatic_integration_filter', 1000 );
}
return apply_filters( 'astra_get_above_header_items', $markup );
}
/**
* Custom Below Header Menu Item Markup
*
* => Used in hooks:
*
* @see astra_masthead_get_menu_items
* @see astra_masthead_custom_nav_menu_items
*
* @since 1.0.0
*/
public function astra_get_below_header_items() {
if ( function_exists( 'ubermenu_automatic_integration_filter' ) ) {
remove_filter( 'wp_nav_menu_args', 'ubermenu_automatic_integration_filter', 1000 );
}
$markup = '';
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
$below_header_enabled = $this->astra_below_header_enabled();
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_header_layout_meta = astra_get_option_meta( 'ast-below-header-display' );
// Menu arguments.
$below_header_menu_args = array(
'theme_location' => 'below_header_menu',
'container' => false,
'fallback_cb' => false,
'echo' => true,
'items_wrap' => '<ul class="ast-below-header-menu-items"> %3$s </ul>',
);
$mobile_menu_style = astra_get_option( 'mobile-menu-style' );
// If menu style is no toggle, remove item wrap div from above header menu.
if ( 'no-toggle' == $mobile_menu_style ) {
$below_header_menu_args['items_wrap'] = '%3$s';
}
if ( $this->astra_below_header_merged_enabled() && $below_header_on_mobile ) {
ob_start();
$below_section_1 = astra_get_option( 'below-header-section-1' );
$below_section_2 = astra_get_option( 'below-header-section-2' );
if ( $below_header_enabled ) {
if ( has_nav_menu( 'below_header_menu' ) ) {
if ( ( 'menu' === $below_section_1 && 'below-header-layout-1' === $below_header_layout ) || ( 'menu' === $below_section_2 && 'below-header-layout-1' === $below_header_layout ) || ( 'menu' === $below_section_1 && 'below-header-layout-2' === $below_header_layout ) ) {
wp_nav_menu( $below_header_menu_args );
}
}
?>
<div class="ast-below-header-custom-menu-items ast-container">
<?php
// Left sections.
if ( 'menu' !== $below_section_1 ) {
self::get_below_header_section( 'below-header-section-1' );
}
// Right sections.
if ( 'menu' !== $below_section_2 && 'below-header-layout-1' === $below_header_layout ) {
self::get_below_header_section( 'below-header-section-2' );
}
?>
</div>
<?php
}
$markup = ob_get_clean();
}
if ( function_exists( 'ubermenu_automatic_integration_filter' ) ) {
add_filter( 'wp_nav_menu_args', 'ubermenu_automatic_integration_filter', 1000 );
}
return apply_filters( 'astra_get_below_header_items', $markup );
}
/**
* Check option if above header merge is enabled.
*
* @param bool $is_merged Is menu should merge.
* @since 1.0.4
* @return bool
*/
public function above_header_merged_disable( $is_merged ) {
$is_merged = astra_get_option( 'above-header-merge-menu' );
return $is_merged;
}
/**
* Check option if below header merge is enabled.
*
* @param bool $is_merged Is menu should merge.
* @since 1.0.4
* @return bool
*/
public function below_header_merged_disable( $is_merged ) {
$is_merged = astra_get_option( 'below-header-merge-menu' );
return $is_merged;
}
/**
* Load Above Header markup IF enabled from Advanced HEaders
*
* @since 1.0.0
* @return bool
*/
public function above_header_disable() {
if ( Astra_Ext_Extension::is_active( 'advanced-headers' ) ) {
// Above Header meta from the Advanced Headers.
$above_header = Astra_Ext_Advanced_Headers_Loader::astra_advanced_headers_layout_option( 'above-header-enabled' );
// Above Header layout from the customizer.
$above_header_layout = astra_get_option( 'above-header-layout' );
if ( 'disabled' != $above_header_layout && ( Astra_Ext_Advanced_Headers_Markup::advanced_header_enabled() && ( is_front_page() && 'posts' == get_option( 'show_on_front' ) ) ) ) {
return false;
} elseif ( 'enabled' != $above_header && 'disabled' != $above_header_layout && Astra_Ext_Advanced_Headers_Markup::advanced_header_enabled() ) {
return true;
}
}
return false;
}
/**
* Load Below Header markup IF enabled from Advanced HEaders
*
* @since 1.0.0
* @return bool
*/
public function below_header_disable() {
if ( Astra_Ext_Extension::is_active( 'advanced-headers' ) ) {
// Below Header meta from the Advanced Headers.
$below_header = Astra_Ext_Advanced_Headers_Loader::astra_advanced_headers_layout_option( 'below-header-enabled' );
// Below Header layout from the customizer.
$below_header_layout = astra_get_option( 'below-header-layout' );
if ( 'disabled' != $below_header_layout && ( Astra_Ext_Advanced_Headers_Markup::advanced_header_enabled() && ( is_front_page() && 'posts' == get_option( 'show_on_front' ) ) ) ) {
return false;
} elseif ( 'enabled' != $below_header && 'disabled' != $below_header_layout && Astra_Ext_Advanced_Headers_Markup::advanced_header_enabled() ) {
return true;
}
}
return false;
}
/**
* Add Body Classes
*
* @param array $classes Body Class Array.
* @return array
*/
public function body_classes( $classes ) {
// Apply Above Below header layout class to the body.
$above_header_on_mobile = astra_get_option( 'above-header-on-mobile' );
$below_header_on_mobile = astra_get_option( 'below-header-on-mobile' );
$below_header_enabled = $this->astra_below_header_enabled();
$below_header_hover_bg = astra_get_option( 'below-header-menu-bg-hover-color-responsive' );
$below_header_active_bg = astra_get_option( 'below-header-current-menu-bg-color-responsive' );
$below_header_menu_bg_color = astra_get_option( 'below-header-menu-bg-obj-responsive' );
$below_header_menu_bg_color = array( $below_header_menu_bg_color['desktop']['background-color'], $below_header_menu_bg_color['tablet']['background-color'], $below_header_menu_bg_color['mobile']['background-color'] );
$below_hover_bg_count = count( array_filter( $below_header_hover_bg ) );
$below_active_bg_count = count( array_filter( $below_header_active_bg ) );
$below_header_bg_count = count( array_filter( $below_header_menu_bg_color ) );
if ( $below_header_enabled && 0 == $below_hover_bg_count && 0 == $below_active_bg_count && 0 == $below_header_bg_count ) {
$classes[] = 'below-header-nav-padding-support';
}
// Apply Above Header header layout class to the body.
$above_header_enabled = $this->astra_above_header_enabled();
$above_header_hover_bg = astra_get_option( 'above-header-menu-h-bg-color-responsive' );
$above_header_active_bg = astra_get_option( 'above-header-menu-active-bg-color-responsive' );
$above_header_menu_bg_color = astra_get_option( 'above-header-menu-bg-obj-responsive' );
$above_header_menu_bg_color = array( $above_header_menu_bg_color['desktop']['background-color'], $above_header_menu_bg_color['tablet']['background-color'], $above_header_menu_bg_color['mobile']['background-color'] );
$above_hover_bg_count = count( array_filter( $above_header_hover_bg ) );
$above_active_bg_count = count( array_filter( $above_header_active_bg ) );
$above_header_menu_bg_color_cnt = count( array_filter( $above_header_menu_bg_color ) );
if ( $above_header_enabled && 0 == $above_hover_bg_count && 0 == $above_active_bg_count && 0 == $above_header_menu_bg_color_cnt ) {
$classes[] = 'above-header-nav-padding-support';
}
if ( ! $above_header_on_mobile ) {
$classes[] = 'ast-above-header-hide-on-mobile';
}
if ( ! $below_header_on_mobile ) {
$classes[] = 'ast-below-header-hide-on-mobile';
}
return $classes;
}
/**
* Add Header Classes
*
* @param array $classes Header Class Array.
* @return array
*/
public function header_classes( $classes ) {
// Apply Above header layout class to the header.
$above_header_enabled = $this->astra_above_header_enabled();
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_header_swap = astra_get_option( 'above-header-swap-mobile' );
$above_header_merge = astra_get_option( 'above-header-merge-menu' );
if ( $above_header_enabled ) {
$classes[] = 'ast-above-header-enabled';
if ( $this->astra_above_header_merged_enabled() && $this->astra_above_header_has_menu() ) {
$classes[] = 'ast-above-header-merged-responsive';
} else {
$classes[] = 'ast-above-header-section-separated';
}
}
if ( $above_header_enabled && $above_header_swap && 'above-header-layout-1' === $above_header_layout ) {
$classes[] = 'ast-swap-above-header-sections';
}
// Apply Below header layout class to the header.
$below_header_enabled = $this->astra_below_header_enabled();
if ( $below_header_enabled ) {
$classes[] = 'ast-below-header-enabled';
if ( $this->astra_below_header_merged_enabled() && $this->astra_below_header_has_menu() ) {
$classes[] = 'ast-below-header-merged-responsive';
} else {
$classes[] = 'ast-below-header-section-separated';
}
}
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_header_swap = astra_get_option( 'below-header-swap-mobile' );
$below_header_merge = astra_get_option( 'below-header-merge-menu' );
if ( $below_header_enabled && $below_header_swap && ! $below_header_merge && 'below-header-layout-1' === $below_header_layout ) {
$classes[] = 'ast-swap-below-header-sections';
}
// Apply Above / Below header mobile align class.
$classes[] = 'ast-above-header-mobile-' . astra_get_option( 'above-header-menu-align' );
$classes[] = 'ast-below-header-mobile-' . astra_get_option( 'below-header-menu-align' );
return $classes;
}
/**
* Above Header status
*/
public function astra_above_header_enabled() {
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_header_meta = astra_get_option_meta( 'ast-above-header-display' );
if ( ! apply_filters( 'astra_above_header_disable', false ) && 'disabled' != $above_header_layout && 'disabled' != $above_header_meta ) {
return true;
}
return false;
}
/**
* Above Header has menu
*/
public function astra_above_header_has_menu() {
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_section_1 = astra_get_option( 'above-header-section-1' );
$above_section_2 = astra_get_option( 'above-header-section-2' );
if ( ( ( 'above-header-layout-1' == $above_header_layout && ( 'menu' == $above_section_1 || 'menu' == $above_section_2 ) ) || ( 'above-header-layout-2' == $above_header_layout && 'menu' == $above_section_1 ) ) ) {
return true;
}
return false;
}
/**
* Below Header has menu
*/
public function astra_below_header_has_menu() {
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_section_1 = astra_get_option( 'below-header-section-1' );
$below_section_2 = astra_get_option( 'below-header-section-2' );
if ( ( ( 'below-header-layout-1' == $below_header_layout && ( 'menu' == $below_section_1 || 'menu' == $below_section_2 ) ) || ( 'below-header-layout-2' == $below_header_layout && 'menu' == $below_section_1 ) ) ) {
return true;
}
return false;
}
/**
* Below Header status
*/
public function astra_below_header_enabled() {
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_header_meta = astra_get_option_meta( 'ast-below-header-display' );
if ( ! apply_filters( 'astra_below_header_disable', false ) && 'disabled' != $below_header_layout && 'disabled' != $below_header_meta ) {
return true;
}
return false;
}
/**
* Above Header Merge status
*/
public function astra_above_header_merged_enabled() {
return apply_filters( 'astra_above_header_merged_responsive', true );
}
/**
* Below Header Merge status
*/
public function astra_below_header_merged_enabled() {
return apply_filters( 'astra_below_header_merged_responsive', true );
}
/**
* Function to get Above Header Section
*
* @param string $option Above Header Menu Option.
* @return mixed
*/
public static function get_above_header_section( $option ) {
$value = astra_get_option( $option );
$output = '';
if ( 'above-header-section-1' == $option ) {
$above_header_widget = 'above-header-widget-1';
}
if ( 'above-header-section-2' == $option ) {
$above_header_widget = 'above-header-widget-2';
}
switch ( $value ) {
case 'search':
case 'text-html':
$sections = astra_get_dynamic_header_content( $option );
if ( is_array( $sections ) && 0 < count( $sections ) ) {
foreach ( $sections as $key => $value ) {
$output .= '<div class="above-header-user-select user-select">';
$output .= $value;
$output .= '</div> <!-- .above-header-user-select.user-select -->';
}
}
break;
case 'menu':
$output .= self::above_header_menu( $option );
break;
case 'widget':
$output .= '<div class="above-header-widget above-header-user-select">';
ob_start();
astra_get_sidebar( $above_header_widget );
$output .= ob_get_clean();
$output .= '</div> <!-- .above-header-widget -->';
break;
default:
$output = apply_filters( 'astra_get_dynamic_header_content', '', $option, $value );
break;
}
return $output;
}
/**
* Function to get Above Header Menu
*
* @param string $option Above Header Menu Option.
* @return mixed
*/
public static function above_header_menu( $option ) {
/**
* Filter the classes(array) for Above Header Menu (<ul>).
*
* @since 1.6.0
* @var Array
*/
$above_header_menu_classes = apply_filters( 'astra_above_header_menu_classes', array( 'ast-above-header-menu', 'ast-nav-menu', 'ast-flex' ) );
// Menu Animation.
$menu_animation = astra_get_option( 'above-header-submenu-container-animation' );
if ( ! empty( $menu_animation ) ) {
$above_header_menu_classes[] = 'astra-menu-animation-' . esc_html( $menu_animation );
}
if ( 'above-header-section-2' == $option ) {
$above_header_menu_classes[] = 'ast-justify-content-flex-end';
$above_header_menu_id = 'ast-above-header-navigation-section-2';
} else {
$above_header_menu_classes[] = 'ast-justify-content-flex-start';
$above_header_menu_id = 'ast-above-header-navigation-section-1';
}
// Submenu with border class.
$above_header_menu_classes[] = 'submenu-with-border';
ob_start();
do_action( 'astra_above_header_toggle_buttons' );
if ( has_nav_menu( 'above_header_menu' ) ) {
/**
* Fires before the Above Header Menu
*
* @since 1.4.0
*/
do_action( 'astra_above_header_before_menu' );
wp_nav_menu(
array(
'container' => 'div',
'container_class' => 'ast-above-header-navigation navigation-accessibility',
'container_id' => $above_header_menu_id,
'theme_location' => 'above_header_menu',
'id' => 'above_header-menu',
'menu_class' => esc_attr( implode( ' ', $above_header_menu_classes ) ),
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
)
);
/**
* Fires after the Above Header Menu
*
* @since 1.4.0
*/
do_action( 'astra_above_header_after_menu' );
} else {
if ( is_user_logged_in() && current_user_can( 'edit_theme_options' ) ) {
?>
<a href="<?php echo esc_url( admin_url( '/nav-menus.php?action=locations' ) ); ?>"><?php esc_html_e( 'Assign Above Header Menu', 'astra-addon' ); ?> </a>
<?php
}
}
return ob_get_clean();
}
/**
* Get Below Header Section
*
* @param string $section Below Header Section.
* @param string $layout Below Header Layout.
* @return void
*/
public static function get_below_header_section( $section, $layout = '' ) {
$section_class = $section . ' ast-flex ast-justify-content-center';
/**
* Filter the classes(array) for Below Header Menu (<ul>).
*
* @since 1.6.0
* @var Array
*/
$below_header_menu_classes = apply_filters( 'astra_below_header_menu_classes', array( 'ast-below-header-menu', 'ast-nav-menu', 'ast-flex' ) );
// Menu Animation.
$menu_animation = astra_get_option( 'below-header-submenu-container-animation' );
if ( ! empty( $menu_animation ) ) {
$below_header_menu_classes[] = 'astra-menu-animation-' . esc_html( $menu_animation );
}
if ( 'below-header-1' == $layout ) {
$section_class = $section . ' ast-flex ast-justify-content-flex-start';
$below_header_menu_classes[] = 'ast-justify-content-flex-start';
if ( 'below-header-section-2' == $section ) {
$section_class = $section . ' ast-flex ast-justify-content-flex-end';
$below_header_menu_classes[] = 'ast-justify-content-flex-end';
}
} else {
$below_header_menu_classes[] = 'ast-justify-content-center';
}
$value = astra_get_option( $section );
if ( 'below-header-section-1' == $section ) {
$below_header_widget = 'below-header-widget-1';
$below_header_menu_id = 'ast-below-header-navigation-section-1';
}
if ( 'below-header-section-2' == $section ) {
$below_header_widget = 'below-header-widget-2';
$below_header_menu_id = 'ast-below-header-navigation-section-2';
}
// Submenu with border class.
$below_header_menu_classes[] = 'submenu-with-border';
switch ( $value ) {
case 'menu':
echo '<div class="ast-below-header-navigation ' . esc_attr( $section_class ) . '">';
do_action( 'astra_below_header_toggle_buttons' );
if ( has_nav_menu( 'below_header_menu' ) ) {
/**
* Fires before the Below Header Menu
*
* @since 1.4.0
*/
do_action( 'astra_below_header_before_menu' );
wp_nav_menu(
array(
'container' => 'nav',
'container_class' => 'ast-below-header-actual-nav navigation-accessibility',
'container_id' => $below_header_menu_id,
'theme_location' => 'below_header_menu',
'menu_id' => 'below_header-menu',
'menu_class' => esc_attr( implode( ' ', $below_header_menu_classes ) ),
)
);
/**
* Fires after the Below Header Menu
*
* @since 1.4.0
*/
do_action( 'astra_below_header_after_menu' );
} else {
if ( is_user_logged_in() && current_user_can( 'edit_theme_options' ) ) {
echo '<a href="' . esc_url( admin_url( '/nav-menus.php?action=locations' ) ) . '">' . esc_html__( 'Assign Below Header Menu', 'astra-addon' ) . '</a>';
}
}
echo '</div>';
break;
case 'search':
case 'text-html':
$sections = astra_get_dynamic_header_content( $section );
if ( is_array( $sections ) && 0 < count( $sections ) ) {
echo '<div class="below-header-user-select ' . esc_attr( $section_class ) . '">';
foreach ( $sections as $key => $value ) {
echo '<div class="user-select">';
echo do_shortcode( $value );
echo '</div>';
}
echo '</div>';
}
break;
case 'widget':
echo '<div class="below-header-widget below-header-user-select ' . esc_attr( $section_class ) . '">';
astra_get_sidebar( $below_header_widget );
echo '</div>';
break;
default:
$output = apply_filters( 'astra_get_dynamic_header_content', '', $section, $value );
if ( ! empty( $output ) ) {
echo '<div class="below-header-user-select ' . esc_attr( $section_class ) . '">';
echo wp_kses_post( $output );
echo '</div>';
}
}
}
/**
* Enqueue Font Family
*/
public function add_fonts() {
// Below Header.
$below_header_enabled = $this->astra_below_header_enabled();
$above_header_enabled = $this->astra_above_header_enabled();
if ( ! $below_header_enabled && ! $above_header_enabled ) {
return;
}
$font_family_primary = astra_get_option( 'font-family-below-header-primary-menu' );
$font_weight_primary = astra_get_option( 'font-weight-below-header-primary-menu' );
Astra_Fonts::add_font( $font_family_primary, $font_weight_primary );
$font_family_dropdown = astra_get_option( 'font-family-below-header-dropdown-menu' );
$font_weight_dropdown = astra_get_option( 'font-weight-below-header-dropdown-menu' );
Astra_Fonts::add_font( $font_family_dropdown, $font_weight_dropdown );
$font_family_content = astra_get_option( 'font-family-below-header-content' );
$font_weight_content = astra_get_option( 'font-weight-below-header-content' );
Astra_Fonts::add_font( $font_family_content, $font_weight_content );
// Above Header.
$above_header_font_family = astra_get_option( 'above-header-font-family' );
$above_header_font_weight = astra_get_option( 'above-header-font-weight' );
Astra_Fonts::add_font( $above_header_font_family, $above_header_font_weight );
// Above Sub Menu Header.
$above_header_sub_menu_font_family = astra_get_option( 'font-family-above-header-dropdown-menu' );
$above_header_sub_menu_font_weight = astra_get_option( 'font-weight-above-header-dropdown-menu' );
Astra_Fonts::add_font( $above_header_sub_menu_font_family, $above_header_sub_menu_font_weight );
}
/**
* Register menus
*/
public function register_menu_locations_widgets() {
register_nav_menus(
array(
'above_header_menu' => __( 'Above Header Menu', 'astra-addon' ),
'below_header_menu' => __( 'Below Header Menu', 'astra-addon' ),
)
);
// Set up our array of widgets.
$widgets = array(
'above-header-widget-1' => array(
'name' => __( 'Above Header First Widget', 'astra-addon' ),
),
'above-header-widget-2' => array(
'name' => __( 'Above Header Second Widget', 'astra-addon' ),
),
'below-header-widget-1' => array(
'name' => __( 'Below Header First Widget', 'astra-addon' ),
),
'below-header-widget-2' => array(
'name' => __( 'Below Header Second Widget', 'astra-addon' ),
),
);
// Loop through them to create our widget areas.
foreach ( $widgets as $widget => $id ) {
register_sidebar(
apply_filters(
'astra_' . $widget . '_init',
array(
'name' => esc_html( $id['name'] ),
'id' => esc_html( $widget ),
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
)
)
);
}
}
/**
* Below Header Header markup loader
*
* Loads appropriate template file based on the style option selected in options panel.
*
* @since 1.0.0
*/
public function below_header_html_markup_loader() {
$below_header_enabled = $this->astra_below_header_enabled();
$below_header_layout = astra_get_option( 'below-header-layout' );
if ( ! $below_header_enabled ) {
return;
}
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
// Add markup.
astra_addon_get_template( 'header-sections/template/' . esc_attr( $below_header_layout ) . '.php' );
}
/**
* Toggle Button
*/
public function below_header_toggle_button() {
if ( ! apply_filters( 'astra_enable_below_header_mobile_menu_button', true ) ) {
return;
}
$below_header_enabled = $this->astra_below_header_enabled();
$below_header_merged = $this->astra_below_header_merged_enabled();
// Add filter to enable the menu buttons.
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
$below_header_toggle_class = apply_filters( 'astra_below_header_menu_toggle_classes', array() );
if ( ! $below_header_merged && $below_header_enabled && has_nav_menu( 'below_header_menu' ) ) {
$below_menu_title = astra_get_option( 'below-header-menu-label' );
?>
<div class="ast-button-wrap">
<span class="screen-reader-text"><?php esc_html_e( 'Below Header', 'astra-addon' ); ?></span>
<button class="menu-toggle menu-below-header-toggle <?php echo esc_attr( implode( ' ', $below_header_toggle_class ) ); ?>" >
<?php Astra_Icons::get_icons( 'menu-bars', true, true, 'below_header' ); ?>
<?php if ( '' !== $below_menu_title ) { ?>
<span class="mobile-menu-wrap"><span class="mobile-menu"><?php echo esc_html( $below_menu_title ); ?></span></span>
<?php } ?>
</button>
</div>
<?php
}
}
/**
* Above Header Markup loader
*/
public function above_header_html_markup_loader() {
$above_header_enabled = $this->astra_above_header_enabled();
$above_header_layout = astra_get_option( 'above-header-layout' );
if ( ! $above_header_enabled ) {
return;
}
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
astra_addon_get_template( 'header-sections/template/' . esc_attr( $above_header_layout ) . '.php' );
}
/**
* Below Header Toggle Button
*/
public function above_header_toggle_button() {
if ( ! apply_filters( 'astra_enable_above_header_mobile_menu_button', true ) ) {
return;
}
$above_header_enabled = $this->astra_above_header_enabled();
$above_header_merged = $this->astra_above_header_merged_enabled();
add_filter( 'astra_enable_mobile_menu_buttons', '__return_true' );
$above_header_toggle_class = apply_filters( 'astra_above_header_menu_toggle_classes', array() );
if ( ! $above_header_merged && $above_header_enabled && has_nav_menu( 'above_header_menu' ) ) {
$above_menu_title = astra_get_option( 'above-header-menu-label' );
?>
<div class="ast-button-wrap">
<button class="menu-toggle menu-above-header-toggle <?php echo esc_attr( implode( ' ', $above_header_toggle_class ) ); ?>" >
<span class="screen-reader-text"><?php esc_html_e( 'Above Header', 'astra-addon' ); ?></span>
<?php Astra_Icons::get_icons( 'menu-bars', true, true, 'above_header' ); ?>
<?php if ( '' !== $above_menu_title ) { ?>
<span class="mobile-menu-wrap"><span class="mobile-menu"><?php echo esc_html( $above_menu_title ); ?></span></span>
<?php } ?>
</button>
</div>
<?php
}
}
/**
* Add Styles
*/
public function add_styles() {
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_header_meta = astra_get_option_meta( 'ast-below-header-display' );
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_header_layout_meta = astra_get_option_meta( 'ast-above-header-display' );
/*** Start Path Logic */
/* Define Variables */
$uri = ASTRA_ADDON_EXT_HEADER_SECTIONS_URL . 'assets/css/';
$path = ASTRA_ADDON_EXT_HEADER_SECTIONS_DIR . 'assets/css/';
$rtl = '';
if ( is_rtl() ) {
$rtl = '-rtl';
}
/* Directory and Extension */
$file_prefix = $rtl . '.min';
$dir_name = 'minified';
if ( SCRIPT_DEBUG ) {
$file_prefix = $rtl;
$dir_name = 'unminified';
}
$css_uri = $uri . $dir_name . '/';
$css_dir = $path . $dir_name . '/';
if ( defined( 'ASTRA_THEME_HTTP2' ) && ASTRA_THEME_HTTP2 ) {
$gen_path = $css_uri;
} else {
$gen_path = $css_dir;
}
/*** End Path Logic */
Astra_Minify::add_css( $gen_path . 'style' . $file_prefix . '.css' );
if ( 'disabled' != $below_header_layout && 'disabled' != $below_header_meta ) {
/* Add style.css */
Astra_Minify::add_css( $gen_path . 'below-header-style' . $file_prefix . '.css' );
if ( 'disabled' == $below_header_layout ) {
return;
}
Astra_Minify::add_css( $gen_path . $below_header_layout . $file_prefix . '.css' );
}
if ( 'disabled' != $above_header_layout && 'disabled' != $above_header_layout_meta ) {
Astra_Minify::add_css( $gen_path . 'above-header-style' . $file_prefix . '.css' );
}
}
/**
* Add Scripts
*/
public function add_scripts() {
$below_header_layout = astra_get_option( 'below-header-layout' );
$below_header_meta = astra_get_option_meta( 'ast-below-header-display' );
$above_header_layout = astra_get_option( 'above-header-layout' );
$above_header_layout_meta = astra_get_option_meta( 'ast-above-header-display' );
/*** Start Path Logic */
/* Define Variables */
$uri = ASTRA_ADDON_EXT_HEADER_SECTIONS_URL . 'assets/js/';
$path = ASTRA_ADDON_EXT_HEADER_SECTIONS_DIR . 'assets/js/';
/* Directory and Extension */
$file_prefix = '.min';
$dir_name = 'minified';
if ( SCRIPT_DEBUG ) {
$file_prefix = '';
$dir_name = 'unminified';
}
$js_uri = $uri . $dir_name . '/';
$js_dir = $path . $dir_name . '/';
if ( defined( 'ASTRA_THEME_HTTP2' ) && ASTRA_THEME_HTTP2 ) {
$gen_path = $js_uri;
} else {
$gen_path = $js_dir;
}
/*** End Path Logic */
if ( 'disabled' != $below_header_layout && 'disabled' != $below_header_meta ) {
Astra_Minify::add_dependent_js( 'astra-theme-js' );
Astra_Minify::add_js( $gen_path . 'ast-below-header' . $file_prefix . '.js' );
}
if ( 'disabled' != $above_header_layout && 'disabled' != $above_header_layout_meta ) {
Astra_Minify::add_js( $gen_path . 'ast-above-header' . $file_prefix . '.js' );
}
}
/**
* Add Meta Options
*
* @param array $meta_option Page Meta.
* @return array
*/
public function add_options( $meta_option ) {
$meta_option['ast-below-header-display'] = array(
'sanitize' => 'FILTER_SANITIZE_STRING',
'default' => astra_get_option( 'ast-below-header-display' ),
);
$meta_option['ast-above-header-display'] = array(
'sanitize' => 'FILTER_SANITIZE_STRING',
'default' => '',
);
return $meta_option;
}
/**
* Below Header Meta Field markup
*
* Loads appropriate template file based on the style option selected in options panel.
*
* @param array $meta Page Meta.
* @since 1.0.0
*/
public function add_options_markup( $meta ) {
// Above Header.
$above_header = ( isset( $meta['ast-above-header-display']['default'] ) ) ? $meta['ast-above-header-display']['default'] : 'default';
$above_header_layout = astra_get_option( 'above-header-layout' );
$show_meta_field = ! astra_check_is_bb_themer_layout();
if ( $show_meta_field && 'disabled' != $above_header_layout ) {
?>
<div class="ast-above-header-display-option-wrap">
<input type="checkbox" id="ast-above-header-display" name="ast-above-header-display" value="disabled" <?php checked( $above_header, 'disabled' ); ?> />
<label for="ast-above-header-display"><?php esc_html_e( 'Disable Above Header', 'astra-addon' ); ?></label> <br />
</div>
<?php
}
// Below Header.
$below_header_layout = astra_get_option( 'below-header-layout' );
if ( $show_meta_field && 'disabled' != $below_header_layout ) {
$below_header = ( isset( $meta['ast-below-header-display']['default'] ) ) ? $meta['ast-below-header-display']['default'] : 'default';
?>
<div class="ast-below-header-display-option-wrap">
<input type="checkbox" id="ast-below-header-display" name="ast-below-header-display" value="disabled" <?php checked( $below_header, 'disabled' ); ?> />
<label for="ast-below-header-display"><?php esc_html_e( 'Disable Below Header', 'astra-addon' ); ?></label> <br />
</div>
<?php
}
}
}
}
/**
* Kicking this off by calling 'get_instance()' method
*/
Astra_Ext_Header_Sections_Markup::get_instance();