0

I'm using the Divi theme by ElegantTheme. I've been trying to switch the place of secondary and primary menu.

For what I understand, I'd need to work with the header.php in a child theme, as they do for another modification on the secondary menu.

But let's be blunt, I got no idea about what to change...

I've been through this code here, and it's not really clear to me what it does and what I should change. Does anyone has a clue ?

Accepted answer & chosen solution

Dan answers pointed me toward the right section. So I'll accept his answer.

At the view of the code, the changes required are not straightforward and requires too much effort. Hence I'll just keep the theme as it is now and do not change anything in my child-theme.

At the moment, this feature is not a priority in my development, and I'll work the visual part of the secondary menu, instead of trying to make it fit to my needs.

Code parts

header.php

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>" />
<?php
    elegant_description();
    elegant_keywords();
    elegant_canonical();

    /**
     * Fires in the head, before {@see wp_head()} is called. This action can be used to
     * insert elements into the beginning of the head before any styles or scripts.
     *
     * @since 1.0
     */
    do_action( 'et_head_meta' );

    $template_directory_uri = get_template_directory_uri();
?>

    <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

    <script type="text/javascript">
        document.documentElement.className = 'js';
    </script>

    <?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php
    $product_tour_enabled = et_builder_is_product_tour_enabled();
    $page_container_style = $product_tour_enabled ? ' style="padding-top: 0px;"' : ''; ?>
    <div id="page-container"<?php echo $page_container_style; ?>>
<?php
    if ( $product_tour_enabled || is_page_template( 'page-template-blank.php' ) ) {
        return;
    }

    $et_secondary_nav_items = et_divi_get_top_nav_items();

    $et_phone_number = $et_secondary_nav_items->phone_number;

    $et_email = $et_secondary_nav_items->email;

    $et_contact_info_defined = $et_secondary_nav_items->contact_info_defined;

    $show_header_social_icons = $et_secondary_nav_items->show_header_social_icons;

    $et_secondary_nav = $et_secondary_nav_items->secondary_nav;

    $et_top_info_defined = $et_secondary_nav_items->top_info_defined;

    $et_slide_header = 'slide' === et_get_option( 'header_style', 'left' ) || 'fullscreen' === et_get_option( 'header_style', 'left' ) ? true : false;
?>

    <?php if ( $et_top_info_defined && ! $et_slide_header || is_customize_preview() ) : ?>
        <?php ob_start(); ?>
        <div id="top-header"<?php echo $et_top_info_defined ? '' : 'style="display: none;"'; ?>>
            <div class="container clearfix">

            <?php if ( $et_contact_info_defined ) : ?>

                <div id="et-info">
                <?php if ( '' !== ( $et_phone_number = et_get_option( 'phone_number' ) ) ) : ?>
                    <span id="et-info-phone"><?php echo et_sanitize_html_input_text( $et_phone_number ); ?></span>
                <?php endif; ?>

                <?php if ( '' !== ( $et_email = et_get_option( 'header_email' ) ) ) : ?>
                    <a href="<?php echo esc_attr( 'mailto:' . $et_email ); ?>"><span id="et-info-email"><?php echo esc_html( $et_email ); ?></span></a>
                <?php endif; ?>

                <?php
                if ( true === $show_header_social_icons ) {
                    get_template_part( 'includes/social_icons', 'header' );
                } ?>
                </div> <!-- #et-info -->

            <?php endif; // true === $et_contact_info_defined ?>

                <div id="et-secondary-menu">
                <?php
                    if ( ! $et_contact_info_defined && true === $show_header_social_icons ) {
                        get_template_part( 'includes/social_icons', 'header' );
                    } else if ( $et_contact_info_defined && true === $show_header_social_icons ) {
                        ob_start();

                        get_template_part( 'includes/social_icons', 'header' );

                        $duplicate_social_icons = ob_get_contents();

                        ob_end_clean();

                        printf(
                            '<div class="et_duplicate_social_icons">
                                %1$s
                            </div>',
                            $duplicate_social_icons
                        );
                    }

                    if ( '' !== $et_secondary_nav ) {
                        echo $et_secondary_nav;
                    }

                    et_show_cart_total();
                ?>
                </div> <!-- #et-secondary-menu -->

            </div> <!-- .container -->
        </div> <!-- #top-header -->
    <?php
        $top_header = ob_get_clean();

        /**
         * Filters the HTML output for the top header.
         *
         * @since ??
         *
         * @param string $top_header
         */
        echo apply_filters( 'et_html_top_header', $top_header );
    ?>
    <?php endif; // true ==== $et_top_info_defined ?>

    <?php if ( $et_slide_header || is_customize_preview() ) : ?>
        <?php ob_start(); ?>
        <div class="et_slide_in_menu_container">
            <?php if ( 'fullscreen' === et_get_option( 'header_style', 'left' ) || is_customize_preview() ) { ?>
                <span class="mobile_menu_bar et_toggle_fullscreen_menu"></span>
            <?php } ?>

            <?php
                if ( $et_contact_info_defined || true === $show_header_social_icons || false !== et_get_option( 'show_search_icon', true ) || class_exists( 'woocommerce' ) || is_customize_preview() ) { ?>
                    <div class="et_slide_menu_top">

                    <?php if ( 'fullscreen' === et_get_option( 'header_style', 'left' ) ) { ?>
                        <div class="et_pb_top_menu_inner">
                    <?php } ?>
            <?php }

                if ( true === $show_header_social_icons ) {
                    get_template_part( 'includes/social_icons', 'header' );
                }

                et_show_cart_total();
            ?>
            <?php if ( false !== et_get_option( 'show_search_icon', true ) || is_customize_preview() ) : ?>
                <?php if ( 'fullscreen' !== et_get_option( 'header_style', 'left' ) ) { ?>
                    <div class="clear"></div>
                <?php } ?>
                <form role="search" method="get" class="et-search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
                    <?php
                        printf( '<input type="search" class="et-search-field" placeholder="%1$s" value="%2$s" name="s" title="%3$s" />',
                            esc_attr__( 'Search &hellip;', 'Divi' ),
                            get_search_query(),
                            esc_attr__( 'Search for:', 'Divi' )
                        );
                    ?>
                    <button type="submit" id="searchsubmit_header"></button>
                </form>
            <?php endif; // true === et_get_option( 'show_search_icon', false ) ?>

            <?php if ( $et_contact_info_defined ) : ?>

                <div id="et-info">
                <?php if ( '' !== ( $et_phone_number = et_get_option( 'phone_number' ) ) ) : ?>
                    <span id="et-info-phone"><?php echo et_sanitize_html_input_text( $et_phone_number ); ?></span>
                <?php endif; ?>

                <?php if ( '' !== ( $et_email = et_get_option( 'header_email' ) ) ) : ?>
                    <a href="<?php echo esc_attr( 'mailto:' . $et_email ); ?>"><span id="et-info-email"><?php echo esc_html( $et_email ); ?></span></a>
                <?php endif; ?>
                </div> <!-- #et-info -->

            <?php endif; // true === $et_contact_info_defined ?>
            <?php if ( $et_contact_info_defined || true === $show_header_social_icons || false !== et_get_option( 'show_search_icon', true ) || class_exists( 'woocommerce' ) || is_customize_preview() ) { ?>
                <?php if ( 'fullscreen' === et_get_option( 'header_style', 'left' ) ) { ?>
                    </div> <!-- .et_pb_top_menu_inner -->
                <?php } ?>

                </div> <!-- .et_slide_menu_top -->
            <?php } ?>

            <div class="et_pb_fullscreen_nav_container">
                <?php
                    $slide_nav = '';
                    $slide_menu_class = 'et_mobile_menu';

                    $slide_nav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'echo' => false, 'items_wrap' => '%3$s' ) );
                    $slide_nav .= wp_nav_menu( array( 'theme_location' => 'secondary-menu', 'container' => '', 'fallback_cb' => '', 'echo' => false, 'items_wrap' => '%3$s' ) );
                ?>

                <ul id="mobile_menu_slide" class="<?php echo esc_attr( $slide_menu_class ); ?>">

                <?php
                    if ( '' == $slide_nav ) :
                ?>
                        <?php if ( 'on' == et_get_option( 'divi_home_link' ) ) { ?>
                            <li <?php if ( is_home() ) echo( 'class="current_page_item"' ); ?>><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'Home', 'Divi' ); ?></a></li>
                        <?php }; ?>

                        <?php show_page_menu( $slide_menu_class, false, false ); ?>
                        <?php show_categories_menu( $slide_menu_class, false ); ?>
                <?php
                    else :
                        echo( $slide_nav );
                    endif;
                ?>

                </ul>
            </div>
        </div>
    <?php
        $slide_header = ob_get_clean();

        /**
         * Filters the HTML output for the slide header.
         *
         * @since ??
         *
         * @param string $top_header
         */
        echo apply_filters( 'et_html_slide_header', $slide_header );
    ?>
    <?php endif; // true ==== $et_slide_header ?>

    <?php ob_start(); ?>
        <header id="main-header" data-height-onload="<?php echo esc_attr( et_get_option( 'menu_height', '66' ) ); ?>">
            <div class="container clearfix et_menu_container">
            <?php
                $logo = ( $user_logo = et_get_option( 'divi_logo' ) ) && '' != $user_logo
                    ? $user_logo
                    : $template_directory_uri . '/images/logo.png';

                ob_start();
            ?>
                <div class="logo_container">
                    <span class="logo_helper"></span>
                    <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
                        <img src="<?php echo esc_attr( $logo ); ?>" alt="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" id="logo" data-height-percentage="<?php echo esc_attr( et_get_option( 'logo_height', '54' ) ); ?>" />
                    </a>
                </div>
            <?php
                $logo_container = ob_get_clean();

                /**
                 * Filters the HTML output for the logo container.
                 *
                 * @since ??
                 *
                 * @param string $logo_container
                 */
                echo apply_filters( 'et_html_logo_container', $logo_container );
            ?>
                <div id="et-top-navigation" data-height="<?php echo esc_attr( et_get_option( 'menu_height', '66' ) ); ?>" data-fixed-height="<?php echo esc_attr( et_get_option( 'minimized_menu_height', '40' ) ); ?>">
                    <?php if ( ! $et_slide_header || is_customize_preview() ) : ?>
                        <nav id="top-menu-nav">
                        <?php
                            $menuClass = 'nav';
                            if ( 'on' == et_get_option( 'divi_disable_toptier' ) ) $menuClass .= ' et_disable_top_tier';
                            $primaryNav = '';

                            $primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'top-menu', 'echo' => false ) );

                            if ( '' == $primaryNav ) :
                        ?>
                            <ul id="top-menu" class="<?php echo esc_attr( $menuClass ); ?>">
                                <?php if ( 'on' == et_get_option( 'divi_home_link' ) ) { ?>
                                    <li <?php if ( is_home() ) echo( 'class="current_page_item"' ); ?>><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'Home', 'Divi' ); ?></a></li>
                                <?php }; ?>

                                <?php show_page_menu( $menuClass, false, false ); ?>
                                <?php show_categories_menu( $menuClass, false ); ?>
                            </ul>
                        <?php
                            else :
                                echo( $primaryNav );
                            endif;
                        ?>
                        </nav>
                    <?php endif; ?>

                    <?php
                    if ( ! $et_top_info_defined && ( ! $et_slide_header || is_customize_preview() ) ) {
                        et_show_cart_total( array(
                            'no_text' => true,
                        ) );
                    }
                    ?>

                    <?php if ( $et_slide_header || is_customize_preview() ) : ?>
                        <span class="mobile_menu_bar et_pb_header_toggle et_toggle_<?php echo esc_attr( et_get_option( 'header_style', 'left' ) ); ?>_menu"></span>
                    <?php endif; ?>

                    <?php if ( ( false !== et_get_option( 'show_search_icon', true ) && ! $et_slide_header ) || is_customize_preview() ) : ?>
                    <div id="et_top_search">
                        <span id="et_search_icon"></span>
                    </div>
                    <?php endif; // true === et_get_option( 'show_search_icon', false ) ?>

                    <?php

                    /**
                     * Fires at the end of the 'et-top-navigation' element, just before its closing tag.
                     *
                     * @since 1.0
                     */
                    do_action( 'et_header_top' );

                    ?>
                </div> <!-- #et-top-navigation -->
            </div> <!-- .container -->
            <div class="et_search_outer">
                <div class="container et_search_form_container">
                    <form role="search" method="get" class="et-search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
                    <?php
                        printf( '<input type="search" class="et-search-field" placeholder="%1$s" value="%2$s" name="s" title="%3$s" />',
                            esc_attr__( 'Search &hellip;', 'Divi' ),
                            get_search_query(),
                            esc_attr__( 'Search for:', 'Divi' )
                        );
                    ?>
                    </form>
                    <span class="et_close_search_field"></span>
                </div>
            </div>
        </header> <!-- #main-header -->
    <?php
        $main_header = ob_get_clean();

        /**
         * Filters the HTML output for the main header.
         *
         * @since ??
         *
         * @param string $main_header
         */
        echo apply_filters( 'et_html_main_header', $main_header );
    ?>
        <div id="et-main-area">
    <?php
        /**
         * Fires after the header, before the main content is output.
         *
         * @since ??
         */
        do_action( 'et_before_main_content' );
0

As far as I understand this would be one of the menus:

$et_secondary_nav = $et_secondary_nav_items->secondary_nav;

And this is the other:

$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'top-menu', 'echo' => false ) );

This is where the first menu gets displayed:

if ( '' !== $et_secondary_nav ) {
    echo $et_secondary_nav;
}

And the second one:

$primaryNav = '';

$primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'top-menu', 'echo' => false ) );
if ( '' == $primaryNav ) :
?>
<ul id="top-menu" class="<?php echo esc_attr( $menuClass ); ?>">
    <?php if ( 'on' == et_get_option( 'divi_home_link' ) ) { ?>
        <li <?php if ( is_home() ) echo( 'class="current_page_item"' ); ?>><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'Home', 'Divi' ); ?></a></li>
    <?php }; ?>

    <?php show_page_menu( $menuClass, false, false ); ?>
    <?php show_categories_menu( $menuClass, false ); ?>
</ul>
<?php
else :
    echo( $primaryNav );
endif;

I think changing the two code snippets where it gets displayed should do the trick, but that doesn't mean that you won't need additional styling after changing these.

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.